Java核心逻辑第7章_的封装、继承、多态.ppt

Java核心逻辑第7章_的封装、继承、多态.ppt

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

为什么使用多态 问题思考 宠物饿了,需要主人给宠物喂食 不同宠物吃的食物不一样 不同宠物恢复后体力值不一样 吃狗粮 吃鱼 小猫 企鹅 健康值增加3 小猫 健康值增加5 企鹅 为什么使用多态 分析 小猫类 增加小猫吃食的方法 企鹅类 增加企鹅吃食的方法 创建主人类 编写给小猫喂食的方法 编写给企鹅喂食的方法 为什么使用多态 问题 如果再领养XXX宠物,就需要给XXX喂食,怎么办? 添加XXX类,继承Pet类,实现吃食方法 修改Master类,添加给XXX喂食的方法 为什么使用多态 public class Master { public void feed( Dog dog ) { dog.eat(); } public void feed( Penguin pgn ) { pgn.eat(); } public void feed( XXX xxx ) { xxx.eat(); } … … } 主人类 … … Master master = new Master(); master.feed(dog); master.feed(penguin); master.feed(xxx); … … 测试方法 频繁修改代码,代码可扩展性、可维护性差,如何优化? 参数都是Pet类的子类 可否使用一个feed(Pet pet)实现对所有宠物的喂食? 使用多态优化设计 多态的概念 生活中的多态 不同类型的打印机打印效果不同 程序中的多态 多态:同一个引用类型,使用不同的实例而执行不同操作 父类引用,子类对象 同一种事物,由于条件不同,产生的结果也不同 黑白打印机 彩色打印机 打印 如何实现多态 使用多态实现思路 编写父类 编写子类,子类重写父类方法 运行时,使用父类的类型,子类的对象 向上转型 实现多态的两种形式 使用父类作为方法形参实现多态 使用父类作为方法返回值实现多态 实现多态的两个要素 Pet pet = new Dog(); 自动类型转换 使用多态 使用多态优化主人给宠物喂食 … … Pet pet = new Dog(); Master master = new Master(); master.feed( pet ); … … public class Master { public void feed( Pet pet ) { pet.eat(); } } 主人类 测试方法 同一种操作方式, 不同的操作对象 使用父类作为 方法形参 多态练习1 需求说明 使用多态实现喂养宠物功能 增加宠物猫并喂食,其健康值增加4 多态练习2 需求说明 使用多态实现领养宠物 使用父类作为方法返回值 实现思路 在Master类添加领养方法getPet(String typeId?) 创建测试类,根据主人选择宠物类型编号来领养宠物 public class Master { public Pet getPet(String typeId?){ … … } } 使用父类作为 返回值类型 主人类 多态的特点 Dog d = new Dog(); Pet a = new Dog(); 多态的特点 对象类型不可变,引用类型可变 只能调用其引用类型中定义的方法 运行时会运行子类覆盖的方法 多态的作用 提高代码的通用性 父类到子类的转换 问题 实现主人与宠物玩耍功能 和小猫玩接飞盘游戏,小猫的健康值减少10,与主人亲密度增加5 和企鹅玩游泳游戏,企鹅的健康值减少10,与主人亲密度增加5 分析 给Dog添加接飞盘方法catchingFlyDisc(?) 给Penguin添加游泳方法swimming(?) 给主人添加play(Pet pet)方法 父类到子类的转换 代码实现 public class Master { public void play(Pet pet){ pet.catchingFlyDisc(); } } public class Penguin extends Pet { public void swimming () { … … } } public class Dog extends Pet { public void catchingFlyDis

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档