1. 1、本文档共80页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
目 标 当完成本章后,你应该能够: 理解方法绑定 理解对象造型 使用关键字instanceof 理解并使用多态的形式参数 理解并使用多态的方法返回类型 多态 句柄引用对象 方法绑定 造型 多态的形式参数 句柄引用对象 没有继承之前 某类的句柄,只能引用该类的对象 例如 Pencil pen = null; pen = new Pencil(); pen.write(“开始做家庭作业!”); 如果引用其它类的对象 则产生编译错误,不能通过编译 示例:TestPencil.java 编译错误 src\TestPencil.java:11: 不兼容的类型 找到: java.lang.String 需要: cn.peter.stationery.Pencil pen = new String(Hi, how are you?); ^ 1 错误 句柄引用对象 有继承之后 某类的句柄 除了可以引用该类的对象之外 还可以引用该类的所有子类的对象 此处,子类包括直接子类和间接子类 父类的句柄引用子类的对象 例如 Pencil pen = null; pen = new RubberPencil(); System.out.println(); pen.write(开始做家庭作业! 第一题的答案是 29\n); pen.write(“第二题的答案是 62\n”); 修改 TestPencil.java 重新编译运行 原因 为什么 父类的句柄可以引用子类的对象呢? 这是由继承来保证的 父类和子类的关系 一般和特殊的关系 子类 is a 父类 问题 如果用父类的句柄来引用子类的对象 那么就不能用该句柄来访问 子类有而父类没有的成员 例如 Pencil pen = null; pen = new RubberPencil(); System.out.println(); pen.write(开始做家庭作业! 第一题的答案是 29\n); pen.write(第二题的答案是 62\n); pen.erase(62); 编译错误 src\TestPencil.java:20: 找不到符号 符号: 方法 erase(java.lang.String) 位置: 类 cn.peter.stationery.Pencil pen.erase(62); ^ 1 错误 原因 使用父类的句柄引用子类的对象 就只能访问父类已经定义的成员 不能访问子类已经定义 但是父类没有定义的成员 此处,成员包括成员变量和成员方法 方法调用 某个方法在父类中已经定义 在子类中进行覆盖 通过父类的句柄引用子类的对象 使用该句柄调用该方法 是运行父类方法的方法体 还是运行子类方法的方法体呢? write() 方法 父类 Pencil 定义了该方法 子类 RubberPencil 覆盖了该方法 程序: Pencil pen = null; pen = new RubberPencil(); System.out.println(); pen.write(开始做家庭作业! 第一题的答案是 29\n); pen.write(“第二题的答案是 62\n”); 类图 运行结果 运行的是子类中方法 write(String) 的方法体 看来还是有一定智能性的 :) 小结 句柄引用对象 如果没有继承 某类的句柄只能引用该类的对象 有继承 某类的句柄可以引用该类的对象 还可以引用该类子类的对象 子类包括直接子类和间接子类 访问成员 通过父类的句柄引用子类的对象 则不能访问父类没有定义而子类定义的成员 如果父类中的方法在子类中进行了覆盖 通过父类的句柄

文档评论(0)

精华文档888 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档