Thinking in Java 07(多态)课件.ppt

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Thinking in Java 07(多态)课件

Java编程思想 第七章:多态 面向对象的设计 数据抽象化、封装 继承 多态 多态 接口与实现分离: 实现了“是什么”与“怎样做”两个模块的分离 代码的组织以及可读性均能获得改善 能创建易于扩充的程序 多态性涉及对“类型”的分解: 通过继承可将一个对象当作它自己的类型或者它自己的基础类型对待 只需一段代码,即可对所有不同的类型(相同的基础类型中衍生出来的)进行同样的处理 相似类型之间的区分是通过“函数的行为差异”实现 而这些函数都可通过基础类函数唤起 向上转型 将某个 object reference 视为一个指向基类的 reference 将对象的类型忘掉:为了扩充 //: c07:music2:Music2.java (p221) class Note { private int value; private Note(int val) { value = val; } public static final Note MIDDLE_C = new Note(0), C_SHARP = new Note(1), B_FLAT = new Note(2); } // Etc. class Instrument { public void play(Note n) { System.out.println(Instrument.play()); } } class Wind extends Instrument { public void play(Note n) { System.out.println(Wind.play()); } } 函数调用绑定 Binding: 建立函数调用和函数体的关联 C: 先期绑定 Java:后期绑定(除声明为final外) 动态绑定,执行期绑定 final 关键字:关闭动态绑定 产生正确的行为 调用 base class 中的函数 所有的 derived classes 会产生正确的行为 将一条消息发给一个对象,让对象自行判断要做什么事情 Shape 及其子类 后期绑定:扩展性 //: Shapes.java ( p225 ) // Polymorphism in Java class Shape { void draw() {} void erase() {} } class Circle extends Shape { void draw() { System.out.println(Circle.draw()); } void erase() { System.out.println(Circle.erase()); } } 扩充性 后来可加入更多的型别 在围绕tune()方法的其他所有代码都发生变化的同时,tune()方法却丝毫不受它们的影响,依然正常工作。这正是利用多形性希望达到的目标。 允许程序员“将发生改变的东西同没有发生改变的东西区分开” Instrument 及其子类 覆写(重写)(overriding) 在子类中,具有与父类相同名字、相同参数表和相同返回值的方法 子类通过重写把父类的状态和行为改变为自身的状态和行为 子类通过 super 实现对父类成员的访问 Java 通过方法重写来实现多态 覆写 vs. 重载 //: c07:WindError.java 重载 ( p229 ) // Accidentally changing the interface. class NoteX { public static final int MIDDLE_C = 0, C_SHARP = 1, C_FLAT = 2; } class InstrumentX { public void play(int NoteX) { System.out.println(InstrumentX.play()); } } Abstract classes(抽象类) 和methods(抽象函数) 抽象函数前面使用 “abstract” 关键字 一种不完全的函数 含有抽象函数的类为抽象类,前面必须使用 Abstract 修饰,即 Abstract class Instrument 及其子类 (参阅 p232

文档评论(0)

dmdt5055 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档