版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章类的多态掌握多态的优势和应用场合掌握父类和子类之间的类型转换掌握instanceof运算符的使用使用父类作为方法形参实现多态本章目标为什么使用多态5-1宠物生病了,需要主人给宠物看病不同宠物看病过程不一样不同宠物恢复后体力值不一样
打针
吃药
吃药
疗养狗狗Q仔为什么使用多态5-2编写主人类编写给狗狗看病的方法编写给Q仔看病的方法编写测试方法调用主人类给狗狗看病的方法调用主人类给Q仔看病的方法为什么使用多态5-3编码实现publicclassMaster{publicvoidCure(Dogdog){if(dog.getHealth()<50){dog.setHealth(60);System.out.println("打针、吃药");
}
}
publicvoidCure(Penguinpenguin){
if(penguin.getHealth()<50)
penguin.setHealth(70);
System.out.println("吃药、疗养");
}}
主人类……Mastermaster=newMaster();master.Cure(dog);master.Cure(penguin);……测试方法为什么使用多态5-4如果又需要给XXX看病,怎么办?添加XXX类,继承Pet类修改Master类,添加给XXX看病的方法使用多态优化设计频繁修改代码,代码可扩展性、可维护性差为什么使用多态5-5使用多态优化后的代码……Petpet=newDog();Mastermaster=newMaster();master.Cure(pet);……测试方法publicclassDogextendsPet{publicvoidtoHospital(){this.setHealth(60);System.out.println("打针、吃药");
}}publicclassPenguinextendsPet{publicvoidtoHospital(){this.setHealth(70);System.out.println("吃药、疗养");
}}publicclassMaster{publicvoidCure(Petpet){if(pet.getHealth()<50)pet.toHospital();}}主人类Dog类Penguin类1234又要给XXX看病时,只需:1.编写XXX类继承Pet类(旧方案也需要)2.创建XXX类对象(旧方案也需要)3.其他代码不变(不用修改Master类)什么是多态生活中的多态你能列举出一个多态的生活示例吗?程序中的多态多态:同一个引用类型,使用不同的实例而执行不同操作父类引用,子类对象同一种事物,由于条件不同,产生的结果也不同如何实现多态3-1用多态实现打印机分为黑白打印机和彩色打印机不同类型的打印机打印效果不同黑白打印机彩色打印机打印如何实现多态3-2使用多态实现思路编写父类编写子类,子类重写父类方法运行时,使用父类的类型,子类的对象计算机可以连接各种打印机无论连接何种打印机打印方法都相同根据连接打印机不同,效果也不同如何实现多态3-3编码实现实现多态的两个要素:1.方法重写2.使用父类类型abstractclassPrinter(){
print(Stringstr);}classColorPrinterextendsPrinter(){
print(Stringstr){System.out.println("输出彩色的"+str);}}classBlackPrinterextendsPrinter(){
print(Stringstr){System.out.println("输出黑白的"+str);}}publicstaticvoidmain(String[]args){
Printerp=newColorPrinter();p.print();p=newBlackPrinter();p.print();}父类子类运行同一种操作方式,不同的操作对象只能调用父类已经定义的方法方法重写方法重写的规则在继承关系的子类中重写的方法名、参数、返回值类型必须与父类相同私有方法不能继承因而也无法重写
位置方法名参数表返回值访问修饰符方法重写子类相同相同相同不能比父类更严格方法重载同类相同不相同无关无关方法重写方法重载VSinstanceof运算符该运算符用来判断一个对象是否属于一个类或者实现了一个接口,结果为true或false在强制类型转换之前通过instanceof运算符检查对象的真实类型,可以避免类型转换异常,从而提高代码健壮性对象instanceof
类或接口/***测试instanceof运算符的使用。*@author北大青鸟*/publicclassTestPoly2{publicstaticvoidmain(String[]args){Petpet=newPenguin("楠楠","Q妹");
//Petpet=newDog("欧欧","雪娜瑞");
pet.eat();
if(petinstanceofDog){
Dogdog=(Dog)pet;
dog.catchingFlyDisc();
}elseif(petinstanceofPenguin){
Penguinpgn=(Penguin)pet;
pgn.swimming();
}
}}publicclassTestPoly2{publicstaticvoidmain(String[]args){//Petpet=newPenguin("楠楠","Q妹");
Petpet=newDog("欧欧","雪娜瑞");
pet.eat();
if(petinstanceofDog){Dogdog=(Dog)pet;dog.catchingFlyDisc();}elseif(petinstanceofPenguin){Penguinpgn=(Penguin)pet;pgn.swimming();}}}指导——实现喂养宠物功能2-1训练要点:子类到父类的自动类型转换使用父类作为方法形参实现多态多态可以减少代码量,可以提高代码的可扩展性和可维护性需求说明:实现喂养宠物功能不同宠物吃的东西不同主人可以喂养不同类型宠物讲解需求说明指导——实现喂养宠物功能2-2实现思路:在Pet类添加吃饭的抽象方法子类实现吃饭方法Master类编写喂养方法,使用Pet类型作为参数运行时,调用喂养方法时,传递一个子类的对象publicclassPet{protectedabstractvoideat();}publicPetfeed(Petpet){pet.eat();}publicclassDogextendsPet{publicvoideat(){super.health=super.health+3;}}Pet类Dog类Master类完成时间:25分钟练习——实现与宠物玩耍功能需求说明:主人和狗狗玩接飞盘游戏,狗狗健康值减少10,与主人亲密度增加5主人和企鹅玩游泳游戏,企鹅健康值减少10,与主人亲密度增加5提示:Dog类添加catchingFlyDisc()方法,实现接飞盘功能Penguin类添加swimming()方法,实现游泳功能主人添加play(Petpet)方法如果pet代表Dog就玩接飞盘游戏如果pet代表Penguin就玩游泳游戏完成时间:25分钟小结什么是多态?使用的多态有什么好处?指导——计算总租金2-1训练要点:多态的使用使用父类类型作为方法参数需求说明:在前面汽车租赁系统的基础上,实现计算多种车辆总租金的功能现在有客户租用:2辆宝马1辆别克商务舱1辆金龙(34)座租5天共多少租金?讲解需求说明指导——计算总租金2-2实现思路:完成时间:35分钟MotoVehile[]motos=newMotoVehile[4];motos[0]=newCar("宝马550i","京NY28588");motos[1]=newCar("宝马550i","京NNN328");motos[2]=newCar("别克林荫大道","京NY28588");motos[3]=newBus("金龙",34);1、创建车的对象,放在数组中CalcTotalRent(MotoVehile[]motos){doubletotalRent=0.0D;for(inti=0;i<motos.length;++i){totalRent+=motos[i].CalRent(5);}returntotalRent;}2、循环调用CalcRent方法,计算总租金小结为什么可以实现这样的效果?再次理解什么是多态?再次理解多态有什么好处?指导——购置
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论