《Java第四章Java类和对象的高级特征.ppt》由会员分享,可在线阅读,更多相关《Java第四章Java类和对象的高级特征.ppt(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Java程序设计程序设计Java类和对象的高级特征类和对象的高级特征内容内容接口接口包包接口接口接口的概念:接口是一组常量和抽象方法接口的概念:接口是一组常量和抽象方法的集合;接口是一个功能规范,一个遵循的集合;接口是一个功能规范,一个遵循该规范的类称为实现了该接口,即,该规范的类称为实现了该接口,即,“所所有实现本接口的有实现本接口的class,都应该提供,都应该提供的功的功能能”java中用接口实现多重继承中用接口实现多重继承定义一个接口,采用关键字定义一个接口,采用关键字interface,实,实现一个接口,采用关键字现一个接口,采用关键字implements定义接口定义接口Java中定
2、义接口的语法如下中定义接口的语法如下定义接口与定义类非常相似,实际上完全定义接口与定义类非常相似,实际上完全可以把接口理解成为一种特殊的类,接口可以把接口理解成为一种特殊的类,接口是由常量和抽象方法组成的特殊类。是由常量和抽象方法组成的特殊类。publicinterface接口名接口名extends父接口名列表父接口名列表/接口体接口体;/常量域声明常量域声明publicstaticfinal域类型域类型域名域名=常量值常量值;/抽象方法声明抽象方法声明publicabstract返回值返回值方法名方法名(参数列表参数列表)throw异常列表异常列表;接口的性质接口的性质接口中所有成员变量隐含
3、为接口中所有成员变量隐含为接口中所有成员变量隐含为接口中所有成员变量隐含为staticstatic和和和和finalfinal,因此,因此,因此,因此它们是常量,并且须有初值;它们是常量,并且须有初值;它们是常量,并且须有初值;它们是常量,并且须有初值;接口不能含非常量数据;接口不能含非常量数据;接口不能含非常量数据;接口不能含非常量数据;接口中的成员变量和方法均是接口中的成员变量和方法均是接口中的成员变量和方法均是接口中的成员变量和方法均是publicpublic的;的;的;的;接口中的成员方法不能是接口中的成员方法不能是接口中的成员方法不能是接口中的成员方法不能是staticstatic的
4、;的;的;的;接口中的成员方法是接口中的成员方法是接口中的成员方法是接口中的成员方法是abstractabstract的;的;的;的;接口不能含方法实现;接口不能含方法实现;接口不能含方法实现;接口不能含方法实现;接口不能用来创建实例;接口不能用来创建实例;接口不能用来创建实例;接口不能用来创建实例;接口可以继承另一个接口。接口可以继承另一个接口。接口可以继承另一个接口。接口可以继承另一个接口。实现接口实现接口格式格式格式格式在类的声明部分,用在类的声明部分,用在类的声明部分,用在类的声明部分,用implementsimplements关键字声明该类将要实关键字声明该类将要实关键字声明该类将要
5、实关键字声明该类将要实现哪些接口。现哪些接口。现哪些接口。现哪些接口。如果实现某接口的类不是抽象类,则在类的定义部分必须如果实现某接口的类不是抽象类,则在类的定义部分必须如果实现某接口的类不是抽象类,则在类的定义部分必须如果实现某接口的类不是抽象类,则在类的定义部分必须实现指定接口的所有抽象方法。否则,该类是抽象类。实现指定接口的所有抽象方法。否则,该类是抽象类。实现指定接口的所有抽象方法。否则,该类是抽象类。实现指定接口的所有抽象方法。否则,该类是抽象类。一个类在实现某接口的抽象方法时,必须使用完全相同的一个类在实现某接口的抽象方法时,必须使用完全相同的一个类在实现某接口的抽象方法时,必须使
6、用完全相同的一个类在实现某接口的抽象方法时,必须使用完全相同的方法声明,返回值类型也必须相同(即,类去覆盖接口中方法声明,返回值类型也必须相同(即,类去覆盖接口中方法声明,返回值类型也必须相同(即,类去覆盖接口中方法声明,返回值类型也必须相同(即,类去覆盖接口中的抽象方法)。的抽象方法)。的抽象方法)。的抽象方法)。接口的抽象方法的访问限制符都已指定为接口的抽象方法的访问限制符都已指定为接口的抽象方法的访问限制符都已指定为接口的抽象方法的访问限制符都已指定为publicpublic,所以类,所以类,所以类,所以类在实现方法时,必须显式地使用在实现方法时,必须显式地使用在实现方法时,必须显式地使
7、用在实现方法时,必须显式地使用publicpublic修饰符。修饰符。修饰符。修饰符。修饰符修饰符class类名类名extends父类名父类名implements接口名接口名,interface./类体类体接口示例接口示例示例示例示例示例2 2:AnimalAnimal.java,Bird.java,Insect.java.java,Bird.java,Insect.javapublicpublicinterfaceinterfaceComparableComparablepublicintcompareTo(Objecto);publicintcompareTo(Objecto);publi
8、cclassDoublepublicclassDoubleimplementsimplementsComparableComparablepublicintcompareTo(Objecto)publicintcompareTo(Objecto)使用接口引用使用接口引用可以用接口名作为数据类型声明变量,该可以用接口名作为数据类型声明变量,该变量用于保存实现了该接口的类的对象的变量用于保存实现了该接口的类的对象的引用。这样的变量称为接口引用变量。引用。这样的变量称为接口引用变量。通过接口引用变量只能调用该接口中声明通过接口引用变量只能调用该接口中声明的方法。的方法。通过接口引用变量可实现多态性。
9、通过接口引用变量可实现多态性。示例:示例:Animal.java,Bird.java,Insect.java,AnimalDemo.java,AnimalDemo2.java接口中的常量接口中的常量接口中所有成员变量隐含为接口中所有成员变量隐含为接口中所有成员变量隐含为接口中所有成员变量隐含为staticstatic和和和和finalfinal,因此,因此,因此,因此它们是常量,并且须有初值;它们是常量,并且须有初值;它们是常量,并且须有初值;它们是常量,并且须有初值;接口不能含非常量数据;接口不能含非常量数据;接口不能含非常量数据;接口不能含非常量数据;一个类可以使用以下两种方式使用接口中的
10、常量:一个类可以使用以下两种方式使用接口中的常量:一个类可以使用以下两种方式使用接口中的常量:一个类可以使用以下两种方式使用接口中的常量:n n该类实现声明了常量的接口,直接使用常量的名称即该类实现声明了常量的接口,直接使用常量的名称即该类实现声明了常量的接口,直接使用常量的名称即该类实现声明了常量的接口,直接使用常量的名称即可可可可n n该类不用实现声明了常量的接口,但在使用接口中的该类不用实现声明了常量的接口,但在使用接口中的该类不用实现声明了常量的接口,但在使用接口中的该类不用实现声明了常量的接口,但在使用接口中的常量时需用:接口名常量时需用:接口名常量时需用:接口名常量时需用:接口名.
11、常量名的方式常量名的方式常量名的方式常量名的方式示例:示例:示例:示例:ConstImpl.javaConstImpl.java接口的继承接口的继承一个接口通过关键字一个接口通过关键字extends继承另一个或继承另一个或多个接口,即接口的继承可以是多重继承多个接口,即接口的继承可以是多重继承(P121错)。错)。当一个类实现继承了其他接口的接口时,当一个类实现继承了其他接口的接口时,必须在类中实现接口继承链中定义的所有必须在类中实现接口继承链中定义的所有方法,否则该类是一个抽象类。(该情况方法,否则该类是一个抽象类。(该情况相当于,一个类实现了多个接口)相当于,一个类实现了多个接口)示例:示
12、例:IFExtend.java接口与抽象类的区别接口与抽象类的区别相同点相同点相同点相同点n n均可包含抽象方法;均可包含抽象方法;均可包含抽象方法;均可包含抽象方法;n n均不能实例化;均不能实例化;均不能实例化;均不能实例化;不同点不同点不同点不同点n n抽象类中可以包含非抽象方法,接口中必须全是抽象抽象类中可以包含非抽象方法,接口中必须全是抽象抽象类中可以包含非抽象方法,接口中必须全是抽象抽象类中可以包含非抽象方法,接口中必须全是抽象方法;方法;方法;方法;n n抽象类可以包含构造方法,接口没有构造方法;抽象类可以包含构造方法,接口没有构造方法;抽象类可以包含构造方法,接口没有构造方法;
13、抽象类可以包含构造方法,接口没有构造方法;n n抽象类中可以有成员变量,接口中只有类成员常量;抽象类中可以有成员变量,接口中只有类成员常量;抽象类中可以有成员变量,接口中只有类成员常量;抽象类中可以有成员变量,接口中只有类成员常量;n n抽象类的成员可以有四种访问权限,而接口的成员只抽象类的成员可以有四种访问权限,而接口的成员只抽象类的成员可以有四种访问权限,而接口的成员只抽象类的成员可以有四种访问权限,而接口的成员只有有有有publicpublic访问权限;访问权限;访问权限;访问权限;n n类只能是单重继承,接口可以有多重继承;一个类可类只能是单重继承,接口可以有多重继承;一个类可类只能是
14、单重继承,接口可以有多重继承;一个类可类只能是单重继承,接口可以有多重继承;一个类可以实现多个接口;以实现多个接口;以实现多个接口;以实现多个接口;n n抽象类约定的是其子类的相似行为的外观,接口可以抽象类约定的是其子类的相似行为的外观,接口可以抽象类约定的是其子类的相似行为的外观,接口可以抽象类约定的是其子类的相似行为的外观,接口可以约定没有继承关系的多个类之间的相似行为的外观。约定没有继承关系的多个类之间的相似行为的外观。约定没有继承关系的多个类之间的相似行为的外观。约定没有继承关系的多个类之间的相似行为的外观。内部类内部类P122,自学,自学包的概念包的概念 包名:包名:p1.p2.pn
15、对应目录对应目录p0p1p2.pn作用作用n n提供代码维护的便利提供代码维护的便利提供代码维护的便利提供代码维护的便利n n提供访问控制的层次提供访问控制的层次提供访问控制的层次提供访问控制的层次包的定义包的定义格式:在源文件的头部加上格式:在源文件的头部加上n npackagepackage 包名包名包名包名;包编程步骤例解(包编程步骤例解(1)设当前目录为设当前目录为设当前目录为设当前目录为myAppmyApp在在在在myAppmyApp下建一子目录下建一子目录下建一子目录下建一子目录comcom在在在在comcom目录下再创建目录下再创建目录下再创建目录下再创建子目录子目录子目录子目录
16、myPackage.myPackage.将以下程序文件将以下程序文件将以下程序文件将以下程序文件PackageTest.javaPackageTest.java建于建于建于建于myPackagemyPackage下下下下:packagecom.myPackage;classPackageTestpublicstaticvoidmain(Stringargs)System.out.println(Thismypackage);包编程步骤例解(包编程步骤例解(2)在在myPackage目录下编译文件目录下编译文件PackageTest.java:n njavacPackageTest.java回到
17、回到myApp目录执行运行命令目录执行运行命令:包的使用包的使用用用用用importimport语句引入外包类语句引入外包类语句引入外包类语句引入外包类两种引入方式:两种引入方式:两种引入方式:两种引入方式:n nimportimport包名包名包名包名.类名类名类名类名;(引入一个类)(引入一个类)(引入一个类)(引入一个类)如:如:如:如:importjava.applet.Applet;importjava.applet.Applet;n nimportimport包名包名包名包名.*;.*;(引入包中所有类)(引入包中所有类)(引入包中所有类)(引入包中所有类)如:如:如:如:impo
18、rtjava.applet.*;importjava.applet.*;以下无需再写全名以下无需再写全名以下无需再写全名以下无需再写全名n nclassMyClassextendsAppletclassMyClassextendsApplet,否则需写为:,否则需写为:,否则需写为:,否则需写为:n nclassMyClassextendsjava.applet.AppletclassMyClassextendsjava.applet.AppletJavaJava中缺省导入中缺省导入中缺省导入中缺省导入java.lang.*java.lang.*包与成员的访问限制包与成员的访问限制一个类可以访
19、问同一包中另一个类的默认一个类可以访问同一包中另一个类的默认修饰符修饰的成员和修饰符修饰的成员和protected修饰的成员;修饰的成员;一个类可以访问不同包中父类的一个类可以访问不同包中父类的protected成员;但不能访问不同包中的默认修饰符成员;但不能访问不同包中的默认修饰符修饰的成员;修饰的成员;默认修饰符所施加的限制高于默认修饰符所施加的限制高于protected修修饰符。饰符。packageGreek;publicclassAlphaprotectedintiamprotected;voidmethod()packageGreek;classGammavoidaccessMeth
20、od()Alphaa=newAlpha();a.iamprotected=10;/a.method();/packageGreek;publicclassAlphaprotectedintiamprotected;staticvoidmethod()packageLatin;importGreek.*;classDeltaextendsAlphavoidaccessMethod()iamprotected=10;/Alpha.method();/XJava中的中的API通过通过API手册自学:手册自学:n njava.lang.*java.lang.*n njava.util.*java.util.*