预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共24页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

AbstractClassandInterface抽象类和接口抽象类然而,由于Shape是一个抽象的概念,如果它也有 display方法就不太合情理。可以做以下几种考虑: 去掉Shape类的display方法 损失了多态性的优点。可能导致程序出错,如上例。 将Shape类的display方法定义成空语句 publicvoiddisplay(){} 将Shape类的display方法定义成抽象方法 abstractclassShape{ … publicabstractvoiddisplay(); }抽象类的特点 抽象类中的方法不一定都是抽象的,抽象类中可以包含抽象的方法,也可以包含具体的方法。 不能实例化抽象类 例:如果Course是抽象类,则以下语句是错误的 Coursec=newCourse(); 但是可以声明对Course对象的引用: Coursex; 抽象类有子类的时候,除非子类采用具体的方法替代抽象类中的全部抽象方法,否则子类本身也被自动被认为是抽象的。接口有了Teacher接口,就可以把对象的各种类指定为教师 例如:可以认为Professor能够教学,Student能够教学,一般的Person也可以教学: classProfessorimplementsTeacher{ Stringname; StingemplyeeId; publicvoidagreeToTeach(Coursec){ //编写代码 } publicvoiddesignateTextbook(Textbookb,Coursec){ //编写代码 } publicsyllabusdefineSyllabus(Coursec){ //编写代码 } publicbooleanapproveEnrollmen(Students,Coursec){ //编写代码 } }说明: 通过这样的定义,Professor类替代了Teacher接口的所有方法,因此Professor类是一个具体的类。 但是如果Professor类没有替换所有的接口,则Professor类只能看成是一个抽象的类。编译器会要求在Professor类的前面加上abstract关键字。一个类可以继承自多个接口 例如:还有一个Administrator接口: interfaceAdministrator{ publicbooleanapproveNewCourse(Coursec); publichireProfessor(Professorp); } 则可以指定类实现Teacher和Administrator接口: classProfessorimplementsTeacher,Administrator{ … } 在这种情况下,类需要替代这两个接口所定义的所有方法。 用接口实现多重继承 问:为什么Java不支持多重继承?多重继承时方法也会发生冲突: 分析: 多重继承发生问题原因之一在于属性(数据结构)冲突,也就是存储空间的冲突。由于接口不与任何存储空间相关联,因此可以解决存储空间冲突的问题。 对于继承的方法的冲突,当使用接口之后,由于接口只定义了方法的抽象,没有具体的执行代码,因此也不会发生代码冲突的问题。在此例中把与讲课有关的所有要素提取出来,放入Teacher接口。此时,ProfessorStudent类和Teacher类都具有了讲课的能力。总结: 一个类可以继承自一个抽象类或具体类,以及多个接口。抽象类Δ说明说明说明(了解)说明接口接口是一个特殊的类接口与抽象类接口与抽象类接口与抽象类接口与抽象类