资源预览内容
第1页 / 共54页
第2页 / 共54页
第3页 / 共54页
第4页 / 共54页
第5页 / 共54页
第6页 / 共54页
第7页 / 共54页
第8页 / 共54页
第9页 / 共54页
第10页 / 共54页
亲,该文档总共54页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
接口 4.5 接口接口 Java 不支持多继承性,即一个类不支持多继承性,即一个类只能有一个父类。单继承性使得只能有一个父类。单继承性使得Java 简简单,易于管理程序。为了克服单继承的单,易于管理程序。为了克服单继承的缺点,缺点,Java使用了接口,一个类可以实使用了接口,一个类可以实现多个接口。现多个接口。 使用关键字使用关键字interface 来定义一个来定义一个接口。接口。接口的定义和类的定义很相似,接口的定义和类的定义很相似,分为接口的声明和接口体。分为接口的声明和接口体。n1、接口的声明与使用、接口的声明与使用(1)接口声明)接口声明 接口通过使用关键字接口通过使用关键字interface 来声明来声明 interface 接口的名字接口的名字(2)接口体)接口体 接口体中包含常量定义和方法定义两接口体中包含常量定义和方法定义两部分。部分。接口体中只进行方法的声明,不许接口体中只进行方法的声明,不许提供方法的实现,所以方法的定义没有方提供方法的实现,所以方法的定义没有方法体,且用分号结尾。法体,且用分号结尾。(3)接口的使用)接口的使用 一个类通过使用关键字一个类通过使用关键字implements 声明自己使用一个或多个接口。声明自己使用一个或多个接口。如果使用如果使用多个接口,用逗号隔开接口名。多个接口,用逗号隔开接口名。如:如:class A implements Printable,Addable class Dog extends Animal implements Eatable,Sleepable 如果一个类使用了某个接口,那么这个类必须如果一个类使用了某个接口,那么这个类必须实现该接口的所有方法,即为这些方法提供方法体。实现该接口的所有方法,即为这些方法提供方法体。需要注意的是在类中实现接口的方法时,方法的名需要注意的是在类中实现接口的方法时,方法的名字、返回类型、参数个数及类型必须与接口中的完字、返回类型、参数个数及类型必须与接口中的完全一致。全一致。特别要注意的是接口中的方法被默认是特别要注意的是接口中的方法被默认是public 的,所以类在实现接口方法时一定要用的,所以类在实现接口方法时一定要用public 来修饰。来修饰。另外,如果接口的方法的返回类型另外,如果接口的方法的返回类型如果不是如果不是void 的,那么在类中实现该接口方法时,的,那么在类中实现该接口方法时,方法体至少要有一个方法体至少要有一个return 语句。如果是语句。如果是void 型,型,类体除了两个大括号外,也可以没有任何语句。类体除了两个大括号外,也可以没有任何语句。 Java 为我们提供的接口都在相应的包中,通为我们提供的接口都在相应的包中,通过引入包可以使用过引入包可以使用Java 提供的接口。也可以自己提供的接口。也可以自己定义接口,定义接口,一个一个java源文件就是由类和接口组成的。源文件就是由类和接口组成的。例:例:import java.applet.*;import java.awt.*; interface Computable final static int MAX=100; void speak(String s); int f(int x); float g(float x,float y); class China implements Computable int xuehao; public int f(int x) /不要忘记不要忘记public关键字关键字. int sum=0; for(int i=1;i=x;i+) sum=sum+i; return sum; public float g(float x,float y) return 6; /至少有至少有return语句语句. public void speak(String s) class Japan implements Computable int xuehao; public int f(int x) return 68; public float g(float x,float y) return x+y; n2、理解接口、理解接口 接口的语法规则很容易记住,但真正理接口的语法规则很容易记住,但真正理解接口更重要。假如轿车、卡车、拖拉机、解接口更重要。假如轿车、卡车、拖拉机、摩托车、客车都是机动车的子类,其中机动摩托车、客车都是机动车的子类,其中机动车是一个抽象类。如果机动车中有一个抽象车是一个抽象类。如果机动车中有一个抽象方法方法 “收取费用收取费用”,那么所有的子类都要实,那么所有的子类都要实现这个方法,即给出方法体,产生各自的收现这个方法,即给出方法体,产生各自的收费行为。这显然不符合人们的思维方法,因费行为。这显然不符合人们的思维方法,因为拖拉机可能不需要有为拖拉机可能不需要有”收取费用收取费用”的功能,的功能,而其他的一些类,比如飞机、轮船等可能也而其他的一些类,比如飞机、轮船等可能也需要具体实现需要具体实现”收取费用收取费用”。 接口可以增加很多类都需要实现的功能,接口可以增加很多类都需要实现的功能,不同的类可以使用相同的接口,同一个类也不同的类可以使用相同的接口,同一个类也可以实现多个接口。接口只关心功能,并不可以实现多个接口。接口只关心功能,并不关心功能的具体实现关心功能的具体实现.注:接口声明时,如果关键字注:接口声明时,如果关键字interface 前面前面加上加上public 关键字,就称这样的接口是一个关键字,就称这样的接口是一个public 接口,接口,public 接口可以被任何一个类接口可以被任何一个类使用。如果一个接口不加使用。如果一个接口不加public 修饰,就称修饰,就称做友好接口类,友好接口可以被同一包中的做友好接口类,友好接口可以被同一包中的类使用。类使用。Java中的接口n接口的概念与特点接口的概念与特点n接口是一组特定的函数定义的集合接口是一组特定的函数定义的集合n接口中只有函数定义,而没有具体的实现接口中只有函数定义,而没有具体的实现n接口中也可以有常量,但不能有变量接口中也可以有常量,但不能有变量n接口的作用是定义了一组接口协议接口的作用是定义了一组接口协议n接口好像一堵墙,将功能与实现彻底分隔开接口好像一堵墙,将功能与实现彻底分隔开Java中的接口n接口的概念与特点接口的概念与特点n接口函数的实现:接口函数的实现:n接口函数可以用任何类来实现接口函数可以用任何类来实现n必须实现接口中的所有函数,而不能只实必须实现接口中的所有函数,而不能只实现一部分现一部分n接口函数的调用:接口函数的调用:n任何程序都可以调用接口中的函数任何程序都可以调用接口中的函数n调用接口函数时不需要知道它是怎么实现调用接口函数时不需要知道它是怎么实现的,也不需要知道它是由哪个类实现的的,也不需要知道它是由哪个类实现的Java中的接口n接口和抽象类的相似之处:接口和抽象类的相似之处:n形式相似,二者都定义了一组抽象的函数,形式相似,二者都定义了一组抽象的函数,而没有具体实现而没有具体实现n接口和抽象类的区别:接口和抽象类的区别:n接口不能有任何函数的实现过程,而抽象类接口不能有任何函数的实现过程,而抽象类可以有函数的实现过程可以有函数的实现过程n类可以实现很多接口,但只能有一个父类类可以实现很多接口,但只能有一个父类n接口不是类层次关系中的一部分,两个彼此接口不是类层次关系中的一部分,两个彼此无关的类也可以实现同一个接口无关的类也可以实现同一个接口Java中的接口n接口的功能例题接口的功能例题n假设编写一个类(假设编写一个类(StockMonitor类)来察类)来察看股市的价格波动看股市的价格波动n表示股票价格的类(股票类)在这个类中注表示股票价格的类(股票类)在这个类中注册,当股价发生变化时,股票对象就自动调册,当股价发生变化时,股票对象就自动调用一个函数来更新股价数据用一个函数来更新股价数据n更新股价的函数属于一个接口,每个股票类更新股价的函数属于一个接口,每个股票类都需要实现更新股价的接口函数功能都需要实现更新股价的接口函数功能Java中的接口n注册股票类的函数:public class StockMonitor public void watchStock(StockWatcher watcher, String tickerSymbol, double delta) . n用于更新股价的接口定义:public interface StockWatcher final String sunTicker = SUNW; final String oracleTicker = ORCL; final String ciscoTicker = CSCO; void valueChanged(String tickerSymbol, double newValue); Java中的接口n接口的作用n本例中,使用接口的原因,是因为我们只关心股票类的某个功能,而不关心其它功能n如果使用类的话,就要强迫所有的股票类都从StockWatcher中继承,由于每个类只能有一个父类,这就限制了股票类的功能n使用接口时,股票类的形式就不会受到限制,只要它实现了StockWatcher接口就行Java中的接口nwatchStock函数功能:n第一个参数:实现StockWatcher接口的对象n第二个参数:股票代号n第三个参数:价格波动的阈值,只有股价波动超过阈值时,才会刷新股价n当StockMonitor对象检测到感兴趣的股价变化时,它会调用watcher对象的valueChanged函数,以获得最新股价Java中的接口n接口的完整语法形式npublicninterface InterfaceNamenExtends SuperInterface1, SuperInterface2, .nn InterfaceBody00nn接口的组成部分:n接口定义部分n接口主体部分Java中的接口n接口的完整语法形式npublic:表示这个接口是公开接口,也就是说可以从任何类中使用这个接口。如果没有“public”关键字,缺省状态下,只有同一个包内的类可以使用这个接口ninterface:表示这是一个接口,“interface”关键字是定义一个接口所必需的nInterfaceName:就是接口名,这也是定义一个接口所必需的Java中的接口n接口的完整语法形式nExtends SuperInterface1, SuperInterface2, .:n定义接口的派生关系n接口也可以从其它接口派生而来n一个类只允许从一个父类派生出来n与类不同,一个接口允许从多个父接口派生而来n“Extends”关键字表明接口是从哪些父接口派生出来的,多个父接口间以逗号隔开Java中的接口n接口的完整语法形式nInterfaceBody:接口定义后面,用花括号括起来的部分就是接口的主体部分n主体部分包括函数定义和常量定义n接口的成员函数:n函数定义与一般的类成员函数相同n接口不实现函数的具体功能,因此每个函数定义后面直接用分号“;”结尾Java中的接口n接口的完整语法形式n所有函数都是public(公开)和abstract(抽象)属性n公开性:接口中定义的函数是给其它对象调用的,因此应当是公开级n抽象性:接口本身并没有函数的具体实现代码,因此接口函数都是抽象函数n接口的成员常量:n成员常量给出了与接口有关的重要常数Java中的接口n接口的完整语法形式n接口可以定义常量,但不能定义变量n所有的常量都是public(公开),static(静态)和final(最终)属性n公开:接口的常量是为其它对象访问而设定的,因此应当为公开级n静态:接口本身没有对象,不存在接口的实例,常量如果不是静态的,就无法访问n最终:接口自身没有状态,接口的成员变量没有意义,因此都是最终型的Java中的接口n接口的完整语法形式n接口的成员函数与成员常量定义中不能使用的修饰词:ntransient(暂时的)nvolatile(可变的)nsynchronized(同步的)nprivate(私有的)nprotected(保护的)Java中的接口n接口的完整语法形式n接口继承机制的意义:n当接口需要增加功能时,如果修改原有接口,则所有实现它的类都需要进行修改,工作量十分惊人n好的办法是保持老的接口不变,再派生出一个新的接口,在新的接口中加入新的函数n新的接口可以完成老接口的全部工作,同时又增添了新的功能Java中的接口n接口的完整语法形式n利用接口的继承机制,老的程序可以仍然使用老的接口,而新的程序可以使用新接口n实现了兼容性与扩展性的统一n例:给StockWatcher接口增加新的功能:n从StockWatcher中派生出新的StockTracker接口,其中加入currentValue函数public interface StockTracker extends StockWatcher void currentValue(String tickerSymbol, double newValue); Java中的接口n接口函数功能的实现n接口仅仅定义了一种函数调用的形式,或者说是定义了行为的规范,它的具体实现是由类来完成的n让类实现一个接口,需要在类定义部分加上“implements”关键字,例如下面的例子:public class StockApp implements StockWatcher public void valueChanged(String tickerSymbol, double newValue) . . . / 具体实现代码 Java中的接口n接口函数功能的实现nimplements关键字位于extends关键字和父类名后面n如果这个类没有父类,则跟在类名的后面n一个类可以实现多个接口,多个接口名应当以逗号隔开,列于implements的后面n实现多个接口的例子:public class StockApp implements StockWatcher, Interface2, Interface3 . . . / 具体实现代码 Java中的接口n接口函数功能的实现n一个类如果要实现一个接口的话,就必须实现接口的所有函数n类中应当包括所有与接口同名的成员函数n函数名、返回值的类型、函数的参数个数、参数名称和参数类型都必须与接口中的函数完全一致n接口中的常量:类在实现接口的同时,还继承了接口中的常量,因此可以作为类的静态成员常量直接使用Java中的接口n接口函数功能的实现n例:valueChanged函数的实现n在StockWatcher接口中:void valueChanged(String tickerSymbol, double newValue);n在实现该接口的StockApp类中:public void valueChanged(String tickerSymbol, double newValue) . / 具体实现代码n二者的名字、返回值、参数都完全一致n函数类型方面都是public(公开)级Java中的接口n接口函数功能的实现n子接口的实现:n对于子接口,类不但要实现子接口中的全部函数,还要实现它的父接口的全部函数n例如:对于StockTracker接口,需要实现currentValue函数和父接口valueChanged函数public class TrackerApp implements StockTracker public void valueChanged(String tickerSymbol, double newValue) . . . void currentValue(String tickerSymbol, double newValue) . . . Java中的接口n接口函数功能的实现n一个类也可以实现多个接口,此时它必须实现所有接口的所有函数n例题:StockAuditApp类public class StockAuditApp implements StockTracker, Audit public void valueChanged(String tickerSymbol, double newValue) . . . void currentValue(String tickerSymbol, double newValue) . . . public boolean auditPassed(String tickerSymbol, Accoutant indAccount) . . . Java中的接口n接口函数功能的实现nAudit接口中有一个函数auditPassednStockAuditApp类有3个函数:ncurrentValue函数实现StockTracker接口中的对应函数nvalueChanged函数实现StockTracker接口的父接口StockWatcher中的对应函数nauditPassed函数实现Audit接口中的对应函数Java中的接口n接口的使用接口的使用n与类相同,当定义一个接口之后,就定义了一种新与类相同,当定义一个接口之后,就定义了一种新的引用型变量类型的引用型变量类型n可以象其它引用变量类型一样,使用接口名来定义可以象其它引用变量类型一样,使用接口名来定义一个引用变量一个引用变量n接口不能产生一个自己的对象,因此接口变量本身接口不能产生一个自己的对象,因此接口变量本身并不能初始化并不能初始化n但接口变量可以指向任何实现该接口的对象,并通但接口变量可以指向任何实现该接口的对象,并通过那个对象来实现接口的功能过那个对象来实现接口的功能Java中的接口n接口的使用接口的使用n例题:接口变量的定义例题:接口变量的定义StockWatcher watcher1, watcher2, watcher3;StockTracker aTracker;Audit aAudit;n对象的初始化对象的初始化StockApp aStockObj = new StockApp();TrackerApp aTrackerObj = new TrackerApp();StockAuditApp aAuditObj = new StockAuditApp();n这三个类都实现了这三个类都实现了StockWatcher接口接口Java中的接口n接口的使用接口的使用n使用下面的代码调用接口函数使用下面的代码调用接口函数aStockObj.valueChanged(StockWatcher.ciscoTicker, curCiscoValue);aTrackerObj.valueChanged(StockWatcher.sunTicker, curSunValue);watcher1 = aStockObj;watcher1.valueChanged(StockWatcher.ciscoTicker, curCiscoValue);watcher1 = aTrackerObj;watcher1.valueChanged(StockWatcher.sunTicker, curSunValue);watcher1 = aAuditObj;watcher1.valueChanged(StockWatcher.sunTicker, curSunValue);Java中的接口n接口的使用接口的使用n接口函数可以象普通的成员函数一样被实现它的对接口函数可以象普通的成员函数一样被实现它的对象调用象调用n对象对象aStockObj, aTrackerObj, aAuditObj所属所属的类虽然不同,但它们都直接或间接地实现了的类虽然不同,但它们都直接或间接地实现了StockWatcher接口接口n因此,这三个对象都可以被因此,这三个对象都可以被StockWatcher类型的类型的接口变量接口变量watcher1所指向所指向n利用接口变量,程序调用了利用接口变量,程序调用了3个彼此不相干的对象个彼此不相干的对象的的valueChanged函数函数Java中的接口n接口的使用接口的使用n接口变量的访问限制:接口变量的访问限制:n接口变量可以指向任何实现该接口的对象接口变量可以指向任何实现该接口的对象n通过接口变量只能调用接口函数和接口常量通过接口变量只能调用接口函数和接口常量n接口变量不能访问对象的其它函数和成员变量,包接口变量不能访问对象的其它函数和成员变量,包括公开变量和私有变量括公开变量和私有变量n例:例:watcher1指向对象指向对象aAuditObj,但它只能调,但它只能调用函数用函数valueChanged(),而不能调用其它函数,而不能调用其它函数,如如currentValue(), auditPassed()Java中的接口n接口的使用接口的使用n接口作为函数的参数:接口作为函数的参数:n如果将接口变量作为参数,就可以调用任何对象的如果将接口变量作为参数,就可以调用任何对象的接口函数,而不用事先知道对象类型接口函数,而不用事先知道对象类型n例:例:StockMonitor类的类的watchStock函数:函数:public void watchStock(StockWatcher watcher, String tickerSymbol, double delta) .n参数参数1变量是一个接口变量,这样,任何实现了变量是一个接口变量,这样,任何实现了StockWatcher接口的对象都可以作为参数被主程接口的对象都可以作为参数被主程序使用序使用Java包nJava中包的概念中包的概念n尽管类具有强大的功能,但仅仅一个类是无法满足尽管类具有强大的功能,但仅仅一个类是无法满足应用程序需要的应用程序需要的n例,最简单的图形界面程序所需的类:例,最简单的图形界面程序所需的类:n入口类:程序入口,进行初始化、自检、创建并入口类:程序入口,进行初始化、自检、创建并运行其它功能类的对象等工作;运行其它功能类的对象等工作;n图形界面类:每个窗体都需要一个窗体类;图形界面类:每个窗体都需要一个窗体类;n数据类:保存程序执行过程中的各种核心数据;数据类:保存程序执行过程中的各种核心数据;n主功能类:实现程序功能的各种函数和子程序;主功能类:实现程序功能的各种函数和子程序;n文件接口类:读取、保存文件。文件接口类:读取、保存文件。Java包nJava中包的概念中包的概念n略复杂的程序还可能需要用户登录与权限管理类、略复杂的程序还可能需要用户登录与权限管理类、数据库接口类、网络接口类等数据库接口类、网络接口类等n中等规模程序大约需要中等规模程序大约需要2060个类个类n稍大型的应用程序有上百个类稍大型的应用程序有上百个类n这样不利于程序的模块化,如果两个类出现同名,这样不利于程序的模块化,如果两个类出现同名,还会造成严重错误还会造成严重错误n为此,提出了为此,提出了“包包”的概念,用于将相关的类组织的概念,用于将相关的类组织起来,形成更高一级的模块起来,形成更高一级的模块Java包nJava中包的概念中包的概念n“包包”是是由一组类和接口所组成的具有一定功能是是由一组类和接口所组成的具有一定功能的集合。的集合。n简单地说,将一组功能相关的类和接口打包起来形简单地说,将一组功能相关的类和接口打包起来形成的整体,就是包。成的整体,就是包。nJava包的作用:包的作用:n使类的组织更加合理,避免类的名称冲突使类的组织更加合理,避免类的名称冲突n“包包” 具有一定的访问控制能力,可以从更上具有一定的访问控制能力,可以从更上层的角度进行访问权限控制层的角度进行访问权限控制Java包nJava中包的概念中包的概念n类在包中的命名空间:类在包中的命名空间:n每个每个Java包为类提供了一个命名空间包为类提供了一个命名空间n两个类如果名字相同,只要所属的包不同,两个类如果名字相同,只要所属的包不同,Java就就会认为它们是不同的类会认为它们是不同的类n这样,在设计类时,就不需要考虑它会不会与现有这样,在设计类时,就不需要考虑它会不会与现有的类(包括的类(包括Java系统类)重复,只需要注意别与同系统类)重复,只需要注意别与同一个包里的类重复就可以了一个包里的类重复就可以了Java包nJava中包的概念中包的概念n例:编写一个绘图程序,其中有圆、矩形等图形类,例:编写一个绘图程序,其中有圆、矩形等图形类,还有一个用于鼠标拖动的接口还有一个用于鼠标拖动的接口/in Graphic.javapublic abstract class Graphic . . . /in Circle.javapublic class Circle extends Graphic implements Draggable . . . /in Rectangle.javapublic class Rectangle extends Graphic implements Draggable . . . /in Draggable.javapublic interface Draggable . . . Java包nJava中包的概念中包的概念n使用包的好处:使用包的好处:n(1) 其他编程人员可以轻易地看出这些类其他编程人员可以轻易地看出这些类和接口是相关的,提高了程序的可读性和接口是相关的,提高了程序的可读性n(2) 你编写的类名不会和其它包中的类名你编写的类名不会和其它包中的类名相冲突,因为每个包有自己的命名空间相冲突,因为每个包有自己的命名空间n(3) 你可以让包中的类相互之间有不受限你可以让包中的类相互之间有不受限制的访问权限,与此同时包以外的其它类制的访问权限,与此同时包以外的其它类在访问你的类时仍然受到严格限制在访问你的类时仍然受到严格限制Java包n创建包创建包n在定义类或接口的源文件开始加入在定义类或接口的源文件开始加入“package”关键字和包名,就将类或接口关键字和包名,就将类或接口放到包里了放到包里了/in Circle.javapackage graphics;public class Circle extends Graphic implements Draggable . . . n如果两个如果两个java源文件的开头都有相同的包名,源文件的开头都有相同的包名,则意味着这两个源文件中的所有类和接口都则意味着这两个源文件中的所有类和接口都属于同一个包属于同一个包Java包n默认包默认包n对于没有指定包名的对于没有指定包名的Java文件,系统认为文件,系统认为它们都属于一个默认的包它们都属于一个默认的包n如果没有把自己的如果没有把自己的Java类放入某个包中,类放入某个包中,那么任何默认包里的对象都可以访问它,并那么任何默认包里的对象都可以访问它,并且不局限于同一个子目录下且不局限于同一个子目录下n因此,应当在每个因此,应当在每个Java文件的顶部都放上文件的顶部都放上package关键字,指明它属于哪个包关键字,指明它属于哪个包n包名也应当是独一无二的包名也应当是独一无二的Java包n包的命名方法包的命名方法nJava建议以公司或自己的域名作为包名,建议以公司或自己的域名作为包名,因为域名肯定是独一无二的因为域名肯定是独一无二的n包的命名方法是将域名去除开头的包的命名方法是将域名去除开头的“www”,再按分隔点颠倒过来,后面加上包的功能,再按分隔点颠倒过来,后面加上包的功能名,以作为包的全名名,以作为包的全名n例:假设域名是例:假设域名是“www.myjavasite.com”,那么你可以将所有的包都以那么你可以将所有的包都以“com.myjavasite”开头。对于绘图功能包,开头。对于绘图功能包,全名是:全名是:package com.myjavasite.package;Java包n包的命名方法包的命名方法n对于大型公司的各个部门,对于大型公司的各个部门,Java包会自然包会自然地按照部门的子域名进行划分地按照部门的子域名进行划分n例:公司域名是例:公司域名是“www.mycom.com”,下属,下属部门的网址是部门的网址是“tech.mycom.com”,“market. mycom.com”,那么这两个部,那么这两个部门的门的Java包名分别是:包名分别是:com.mycom.tech, com.mycom.marketn对于部门中的不同项目组、不同项目,也可对于部门中的不同项目组、不同项目,也可照此方法细分下去照此方法细分下去Java包n包的命名方法包的命名方法n例:例:mycom公司的公司的tech部门下的一个名叫部门下的一个名叫“oxyproj”(氧计划)项目的(氧计划)项目的“gui”(图(图形界面)部分的包名:形界面)部分的包名:package com.mycom.tech.oxyproj.gui;n对于大型公司,在有很多项目同时运作的情对于大型公司,在有很多项目同时运作的情况下,也能根据包名判断它所属的部门、项况下,也能根据包名判断它所属的部门、项目、项目中的模块,以及包的基本功能目、项目中的模块,以及包的基本功能Java包n访问包中的类访问包中的类n包中的类也有访问级别控制包中的类也有访问级别控制n类的访问级别只有类的访问级别只有2级:缺省级和公开级级:缺省级和公开级n缺省级不需要任何关键字,只有同一个包内缺省级不需要任何关键字,只有同一个包内的对象可以访问该类,外界不能访问的对象可以访问该类,外界不能访问n例如:例如:“class TheClass”n公开级需要在类定义前加公开级需要在类定义前加“public”关键字关键字n例如:例如:“public class TheClass”Java包n访问包中的类访问包中的类n在公开级下,不但同一个包里的其它类可以在公开级下,不但同一个包里的其它类可以访问这个类,而且其它包也可以访问它访问这个类,而且其它包也可以访问它n例:例:Graphic, Circle, Rectangle类都在类都在com. mycom.graphics包中。包中。nCircle, Rectangle类是缺省级,它们只能类是缺省级,它们只能被同一个包中的被同一个包中的Graphic类访问到类访问到nGraphic类是公开级,可以被其它包访问类是公开级,可以被其它包访问Java包n访问包中的类访问包中的类/ in Graphic.javapackage com.mycom.graphics;public class Graphic Circle aCircle = new Circle(); Rectangle aRect = new Rectangle(); / in Draggable.javapackage com.mycom.graphics;public interface Draggable . . . / in Circle.javapackage com.mycom.graphics;class Circle implements Draggable . . . / in Rectangle.javapackage com.mycom.graphics;class Rectangle implements Draggable . . . Java包访问包中的类本例中,如果从其它包中访问缺省级的类,就会出现错误:/ in MyPlot.javapackage com.mycom.plotcurves;import com.mycom.graphics.*;class MyPlot Graphic aGraph = new Graphic(); Circle aCircle = new Circle(); com.mycom.graphics.Rectangle aRect = new com.mycom.graphics.Rectangle();
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号