- 1、本文档共51页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章 抽象类和接口
Chapter 9 Abstract Classes and Interfaces抽象类和接口 抽象类 例:假设每个与形状有关的类都定义了display方法,用来显示具体对象的形状。 然而,由于Shape是一个抽象的概念,如果它也有 display方法就不太合情理。可以做以下几种考虑: 去掉Shape类的display方法 损失了多态性的优点。可能导致程序出错,如上例。 将Shape类的display方法定义成空语句 public void display() { } 将Shape类的display方法定义成抽象方法 abstract class Shape { … public abstract void display(); } 抽象类的特点 抽象类中的方法不一定都是抽象的,抽象类中可以包含抽象的方法,也可以包含具体的方法。 不能实例化抽象类 例:如果Course是抽象类,则以下语句是错误的 Course c = new Course(); 但是可以声明对Course对象的引用: Course x; 抽象类有子类的时候,除非子类采用具体的方法替代抽象类中的全部抽象方法,否则子类本身也被自动被认为是抽象的。 接口 接口比抽象类更抽象,它仅仅声明了方法。 例如:为了教学,对象可能需要提供以下服务: 同意教授特定的课程 指定课程所使用的教科书 定义课程的授课提纲 批准特定的学生参加课程学习 此时可以建立关于一个Teacher的接口: interface Teacher { public void agreeToTeach(Course c); public void designateTextbook(Textbook b, Course c); public syllabus defineSyllabus(Course c); public boolean approveEnrollmen(Student s, Course c); } 有了Teacher接口,就可以把对象的各种类指定为教师 例如:可以认为Professor能够教学,Student能够教学,一般的Person也可以教学: class Professor implements Teacher { String name; Sting emplyeeId; public void agreeToTeach(Course c) { //编写代码 } public void designateTextbook(Textbook b, Course c) { //编写代码 } public syllabus defineSyllabus(Course c) { //编写代码 } public boolean approveEnrollmen(Student s, Course c) { //编写代码 } } 说明: 通过这样的定义,Professor类替代了Teacher接口的所有方法,因此Professor类是一个具体的类。 但是如果Professor类没有替换所有的接口,则Professor类只能看成是一个抽象的类。编译器会要求在Professor类的前面加上abstract关键字。 一个类可以继承自多个接口 例如:还有一个Administrator接口: interface Administrator { public boolean approveNewCourse(Course c); public hireProfessor (Professor p); } 则可以指定类实现Teacher和Administrator接口: class Professor implements Teacher,Administrator { … } 在这种情况下,类需要替代这两个接口所定义的所有方法。 用接口实现多重继承 问:为什么Java不支持多重继承? 多重继承时方法也会发生冲突: 分析: 多重继承发生问题原因之一在于属性(数据结构)冲突,也就是存储空间的冲突。由于接口不与任何存储空间相关联,因此可以解决存储空间冲突的问题。 对于继承的方法的冲突,当使用接口之后,由于接口只定义了方法的抽象,没有具体的执行代码,因此也不会发生代码冲突的问题。 总结: 一个类可以继承自一个抽象类或具体类,以及多个接口。 抽象类 Δ 说明 说明 说明(了解) 说明 不能用new运算符创建抽象类的实例,但是,抽象类可以用作数据类型。 下面的语句创建了一个元素是GeometricObject类型的数组: GeometricObject [
文档评论(0)