- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
008.第八章.多态汇编
Java程序设计
基于Java语言的面向对象程序设计
第二部分
Java面向对象编程
Java程序设计
回顾
实现继承的关键字是什么?
使用继承有什么好处?
子类继承父类后,如何调用父类的属性和方法?
什么是抽象类?
第八章 多态
第一节 没有多态会怎么样?
Java程序设计
为什么使用多态 1
实现一个主人类,当宠物饿了的时候需要给宠物喂食。
给主人类(Master)添加一个feed方法。
然而,不同宠物吃的东西不一样:
其次,不同宠物吃完食物恢复后体力值不一样:
吃狗粮
吃鱼
狗狗
企鹅
健康值增加3
狗狗
健康值增加5
企鹅
为什么使用多态 2
狗狗类
增加狗狗吃食的方法
企鹅类
增加企鹅吃食的方法
创建主人类
编写给狗狗喂食的方法
编写给企鹅喂食的方法
编写测试方法
调用主人类给狗狗喂的方法
调用主人类给企鹅喂的方法
为什么使用多态 3
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)实现对所有宠物的喂食?
使用多态优化设计
为什么使用多态 4
如果再领养XXX宠物,就需要给XXX喂食,怎么办?
添加XXX类,继承Pet类,实现吃食方法
修改Master类,添加给XXX喂食的方法
第八章 多态
第二节 什么是多态?
Java程序设计
什么是多态
生活中的多态
不同类型的打印机打印效果不同
程序中的多态
多态:同一个引用类型,使用不同的实例而执行不同操作
父类引用,子类对象
使用同一类事物,由于事物的分类或者使用的条件不同,产生的结果也不同
多态的作用
如果主人不停的领养宠物,就要一直添加方法,有没有一劳永逸的方法?
既然狗、企鹅、兔子等都是宠物类,能不能只写一个函数,该函数接收一个Pet对象作为参数就可以了?
Pet类是抽象类,实现eat方法无意义,怎么办?
调用某个Pet类的引用到底调用了谁的方法?
使用父类作为方法形参实现多态
使用多态优化主人给宠物喂食
… …
Dog dog = new Dog();
Master master = new Master();
master.feed( dog );
… …
public class Master {
public void feed( Pet pet ) {
}
}
主人类
测试方法
同一种操作方式,
不同的操作对象
使用父类作为
方法形参
使用父类作为形式参数,可以接受子类的对象作为实参。
进入到方法之后,该对象仅能当做父类使用,无法访问子类的成员。
到底调用谁的方法
Pet类的eat()方法怎么写?
调用Pet类的eat()方法,之后究竟执行谁的方法?
public class Pet {
public abstract void eat();
}
master.feed( dog );
… …
public void feed( Pet pet ) {
pet.eat();
}
master.feed( pgn );
… …
public void feed( Pet pet ) {
pet.eat();
}
父类对象引用实际指向的对象是谁,就执行谁的方法。
在C++中,必须使用virtual关键字才能实现多态,Java中,所有方法都是virtual方法。
父类作为返回值
主人无聊的时候想随机地找一只宠物来玩。
使用随机数生成器java.util.Random类
随机数种子的使用
生成随机数的范围nextInt(int n)
如何返回宠物?
父类作为方法返回值
使用多态实现领养宠物
使用父类Pet作为方法返回值
实现思路
首先需要有一个宠物列表
在Master类添加领养方法chooseRandomPet(Pet[] pets)方法
调用随机数生成器,
您可能关注的文档
- (语文S版)一年级语文下册课件4.春雨的色彩2汇编.ppt
- (课堂设计)20132014高中政治1.3.2树立正确的消费观学案新人教版必修1汇编.doc
- (课堂设计)20142015高中生物1.3有机化合物及生物大分子同步训练浙科版必修1汇编.doc
- (课堂设计)20142015高中语文1.1落日课检测试题语文版必修1汇编.doc
- (课堂设计)20142015高中生物2.4.1植物生长素的发现和生长素的特性每课一练苏教版必修3汇编.doc
- (课堂设计)20142015高中生物第一章植物生命活动的调节本章测试1浙科版必修3汇编.doc
- (选修课)修改版书法常识汇编.doc
- (课堂)第三讲近代中国反侵略、求民主的潮流汇编.ppt
- (课件1)5.1太阳光与影子(一)汇编.ppt
- (通用)高三语文复习之压缩语段·汇编.ppt
文档评论(0)