《Java第四章Java类和对象的高级特征.ppt》由会员分享,可在线阅读,更多相关《Java第四章Java类和对象的高级特征.ppt(21页珍藏版)》请在三一办公上搜索。
1、Java程序设计,Java类和对象的高级特征,内容,接口包,接口,接口的概念:接口是一组常量和抽象方法的集合;接口是一个功能规范,一个遵循该规范的类称为实现了该接口,即,“所有实现本接口的class,都应该提供的功能”java中用接口实现多重继承定义一个接口,采用关键字interface,实现一个接口,采用关键字implements,定义接口,Java中定义接口的语法如下定义接口与定义类非常相似,实际上完全可以把接口理解成为一种特殊的类,接口是由常量和抽象方法组成的特殊类。,public interface 接口名 extends 父接口名列表/接口体;/常量域声明 public static
2、 final 域类型 域名=常量值;/抽象方法声明 public abstract 返回值 方法名(参数列表)throw异常列表;,接口的性质,接口中所有成员变量隐含为static和final,因此它们是常量,并且须有初值;接口不能含非常量数据;接口中的成员变量和方法均是public的;接口中的成员方法不能是static的;接口中的成员方法是abstract的;接口不能含方法实现;接口不能用来创建实例;接口可以继承另一个接口。,实现接口,格式在类的声明部分,用implements关键字声明该类将要实现哪些接口。如果实现某接口的类不是抽象类,则在类的定义部分必须实现指定接口的所有抽象方法。否则,
3、该类是抽象类。一个类在实现某接口的抽象方法时,必须使用完全相同的方法声明,返回值类型也必须相同(即,类去覆盖接口中的抽象方法)。接口的抽象方法的访问限制符都已指定为public,所以类在实现方法时,必须显式地使用public修饰符。,修饰符 class 类名 extends 父类名implements 接口名,interface./类体,接口示例,示例2:Animal.java,Bird.java,Insect.java,public interface Comparable public int compareTo(Object o);public class Double implemen
4、ts Comparable public int compareTo(Object o),使用接口引用,可以用接口名作为数据类型声明变量,该变量用于保存实现了该接口的类的对象的引用。这样的变量称为接口引用变量。通过接口引用变量只能调用该接口中声明的方法。通过接口引用变量可实现多态性。示例:Animal.java,Bird.java,Insect.java,AnimalDemo.java,AnimalDemo2.java,接口中的常量,接口中所有成员变量隐含为static和final,因此它们是常量,并且须有初值;接口不能含非常量数据;一个类可以使用以下两种方式使用接口中的常量:该类实现声明了常
5、量的接口,直接使用常量的名称即可该类不用实现声明了常量的接口,但在使用接口中的常量时需用:接口名.常量名的方式示例:ConstImpl.java,接口的继承,一个接口通过关键字extends继承另一个或多个接口,即接口的继承可以是多重继承(P121错)。当一个类实现继承了其他接口的接口时,必须在类中实现接口继承链中定义的所有方法,否则该类是一个抽象类。(该情况相当于,一个类实现了多个接口)示例:IFExtend.java,接口与抽象类的区别,相同点均可包含抽象方法;均不能实例化;不同点抽象类中可以包含非抽象方法,接口中必须全是抽象方法;抽象类可以包含构造方法,接口没有构造方法;抽象类中可以有成
6、员变量,接口中只有类成员常量;抽象类的成员可以有四种访问权限,而接口的成员只有public访问权限;类只能是单重继承,接口可以有多重继承;一个类可以实现多个接口;抽象类约定的是其子类的相似行为的外观,接口可以约定没有继承关系的多个类之间的相似行为的外观。,内部类,P122,自学,包的概念,包名:p1.p2.pn对应目录p0p1p2.pn作用提供代码维护的便利提供访问控制的层次,包的定义,格式:在源文件的头部加上package 包名;,包编程步骤例解(1),设当前目录为myApp在myApp下建一子目录com在com目录下再创建子目录 myPackage.将以下程序文件PackageTest.j
7、ava 建于myPackage下:,package com.myPackage;class PackageTest public static void main(String args)System.out.println(This my package);,包编程步骤例解(2),在myPackage目录下编译文件PackageTest.java:javac PackageTest.java回到myApp目录执行运行命令:,包的使用,用import语句引入外包类两种引入方式:import 包名.类名;(引入一个类)如:import java.applet.Applet;import 包名.*
8、;(引入包中所有类)如:import java.applet.*;以下无需再写全名class MyClass extends Applet,否则需写为:class MyClass extends java.applet.Applet Java中缺省导入java.lang.*,包与成员的访问限制,一个类可以访问同一包中另一个类的默认修饰符修饰的成员和protected修饰的成员;一个类可以访问不同包中父类的protected成员;但不能访问不同包中的默认修饰符修饰的成员;默认修饰符所施加的限制高于protected修饰符。,package Greek;public class Alpha pro
9、tected int iamprotected;void method(),package Greek;class Gamma void accessMethod()Alpha a=new Alpha();a.iamprotected=10;/a.method();/,package Greek;public class Alpha protected int iamprotected;static void method(),package Latin;import Greek.*;class Delta extends Alpha void accessMethod()iamprotected=10;/Alpha.method();/X,Java中的API,通过API手册自学:java.lang.*java.util.*,