对象村的优质生活继承与多态.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
对象村的优质生活继承与多态.ppt

* * 第5讲 对象村的优质生活—继承与多态 【入门引例】从格言与俗语所想到的 人终有一死 我们都是人 因此我们也不免一死 —经典逻辑三段论 儿子像娘,金子打墙 —绍兴俗语 我们继承人类的行为(方法) 儿子继承娘的外形特征(实例变量) 子类继承父类的实例变量和方法(统称类的成员) 设计继承时,将共同的代码放在父类中,便于子类继承 父类比较抽象,子类更加具体 【学习重点】 1. 理解我们为什么需要继承与多态 2. 理解继承的概念、层次 3. 会利用IS-A测试是否存在继承关系 5. 会进行方法的覆盖,并区分方法的重载 4. 理解并会应用多态 5.1 开始!继承 子类PantherMan自动继承父类SuperHero的实例变量和方法,但子类PantherMan可以加入自己的实例变量和方法,也可以覆盖掉继承自父类SuperHero的方法 子类FriedEggMan不需要任何独特的行为,没有覆盖任何方法 实例变量无法被覆盖(不需要,实例变量并没有定义特殊的行为) 5.1.1 超人归来—了解继承 子类PantherMan重新定义继承自父类SuperHero的useSpecialPower()方法,以改变或延伸此方法的行为,称之为覆盖 class Doctor { boolean worksAtHospital; void treatPatient() { … } } class Surgeon extends Doctor { void treatPatient() { … } void makeIncision() { … } } class FamilyDoctor extends Doctor { boolean makeHouseCalls; void giveAdvice() { … } } 5.1.2 实习医生格蕾—继承的范例 子类是extends父类出来的 Surgeon有多少个实例变量? 1 FamilyDoctor有多少个实例变量? 2 Doctor有多少个方法? 1 Surgeon有多少个方法? 2 FamilyDoctor有多少个方法? 2 FamilyDoctor可执行treatPatient()吗? 可以 FamilyDoctor可执行makeIncision()吗 不行 5.1.3 用继承来防止子类中出现重复的程序代码 设 计 代 表 共 同 属 性 与 行 为 的 类 可 以 随 时 加 入 新 类 型 的 动 物 覆 盖 哪 些 方 法 ? 动物都以同样的方式进食吗? 细 分 类 的 继 承 层 次 寻 找 使 用 共 同 行 为 的 子 类 进 一 步 抽 象 化 Dog myDog = new Dog(); myDog.makeNoise(); //调用Dog的版本 myDog.roam(); //调用Canine的版本 myDog.eat(); //调用Dog的版本 myDog.sleep(); //调用Animal的版本 调用哪个方法? 是一个 有一个 IS-A可以测试是否继承 调用对象引用的方法时,调用的是与该对象类型最接近的方法,低阶优先!靠继承树下方的胜出!Canine比Animal低,Dog又在Canine的下方,因此,JVM从Dog找起,如果找不到Dog版的方法,JVM会往上寻找直到找到为止 HAS-A能测试是否继承吗? Dog类有几个方法? 4个 makeNoise()和eat()是自己覆盖过的方法 roam()继承自Canine覆盖Animal后的方法 sleep()继承自Animal 不能 使用IS-A测试来检验继承结构的合理性 Canine继承Animal Dog继承Canine Dog继承Animal Dog IS-A Canine Dog IS-A Animal 如果类Y继承类X,且类Y是类Z的父类,则Z能通过IS-A X的测试 继承概念下的IS-A测试必须是单向关系 (Dog是Animal,但Animal不一定是Dog) public类型的实例变量和方法会被继承 private类型的实例变量和方法不会被继承 继承是面向对象程序设计的关键特性,却不一定是代码重用的最佳方式,当你掌握了面向对象思想后,敬请关注设计模式(Design Pattern) 继承到底有什么

文档评论(0)

光光文挡 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档