Java零基础系列教程013Java多态[豆约翰]

不同宠物吃的东西不一样,狗吃骨头,企鹅吃鱼

不同宠物恢复后体力值不一样

狗狗类增加狗狗吃食的方法

企鹅类增加企鹅吃食的方法

创建主人类编写给狗狗喂食的方法编写给企鹅喂食的方法

编写测试方法调用主人类给狗狗喂的方法调用主人类给企鹅喂的方法

宠物父类

publicabstractclassPet{ privateStringname="无名氏";//昵称 privateinthealth=100;//健康值 privateintlove=0;//亲密度 /** *抽象方法eat(),负责宠物吃饭功能。 */ publicabstractvoideat(); /** *有参构造方法。 *@paramname昵称 */ publicPet(){ } publicPet(Stringname){ this.name=name; } publicvoidsetName(Stringname){ this.name=name; } publicvoidsetHealth(inthealth){ this.health=health; } publicvoidsetLove(intlove){ this.love=love; } publicStringgetName(){ returnname; } publicintgetHealth(){ returnhealth; } publicintgetLove(){ returnlove; } /** *输出宠物信息。 */ publicvoidprint(){ System.out.println("宠物的自白:\n我的名字叫"+this.name+ ",健康值是" +this.health+",和主人的亲密度是" +this.love+"。"); } }狗类

publicclassDogextendsPet{ privateStringstrain;//品种 /** *有参构造方法。 *@paramname昵称 *@paramstrain品种 */ publicDog(Stringname,Stringstrain){ super(name); this.strain=strain; } publicStringgetStrain(){ returnstrain; } /** *重写父类的print方法。 */ publicvoidprint(){ super.print();//调用父类的print方法 System.out.println("我是一只"+this.strain+"。"); } /** *实现吃食方法。 */ publicvoideat(){ if(getHealth()>=100){ System.out.println("狗狗"+this.getName()+"吃饱了,不需要喂食了!"); }else{ this.setHealth(this.getHealth()+3); System.out.println("狗狗"+this.getName()+"吃饱啦!健康值增加3。"); } }}企鹅类

publicclassPenguinextendsPet{ privateStringsex;//性别 /** *有参构造方法。 *@paramname昵称 *@paramsex性别 */ publicPenguin(Stringname,Stringsex){ super(name); this.sex=sex; } publicStringgetSex(){ returnsex; } /** *重写父类的print方法。 */ publicvoidprint(){ super.print(); System.out.println("性别是"+this.sex+"。"); } /** *实现吃食方法。 */ publicvoideat(){ if(getHealth()>=100){ System.out.println("企鹅"+this.getName()+"吃饱了,不需要喂食了!"); }else{ this.setHealth(this.getHealth()+5); System.out.println("企鹅"+this.getName()+"吃饱啦!健康值增加3。"); } }}主人类

publicclassMaster{ privateStringname="";//主人名字 privateintmoney=0;//元宝数 /** *有参构造方法。 *@paramname主人名字 *@parammoney元宝数 */ publicMaster(Stringname,intmoney){ this.name=name; this.money=money; } publicvoidsetName(Stringname){ this.name=name; } publicvoidsetMoney(intmoney){ this.money=money; } publicintgetMoney(){ returnmoney; } publicStringgetName(){ returnname; } /** *主人给Dog喂食。 */ publicvoidfeed(Dogdog){ dog.eat(); } /** *主人给Penguin喂食。 */ publicvoidfeed(Penguinpgn){ pgn.eat(); }}测试类

publicclassTest{ publicstaticvoidmain(String[]args){ Dogdog=newDog("欧欧","雪娜瑞"); dog.setHealth(80);//设置健康值,以便正常喂食 Penguinpgn=newPenguin("楠楠","Q妹"); Mastermaster=newMaster("王先生",100); master.feed(dog);//主人给狗狗喂食 master.feed(pgn);//主人给企鹅喂食 pgn.setHealth(80);//设置健康值,以便正常喂食 master.feed(pgn);//主人再次给企鹅喂食 }}如果再领养新种类XXX的宠物,就需要给XXX喂食,怎么办?添加XXX类,继承Pet类,实现吃食方法修改Master类,添加给XXX喂食的方法publicclassMaster{publicvoidfeed(Dogdog){dog.eat();} publicvoidfeed(Penguinpgn){pgn.eat();} publicvoidfeed(XXXxxx){xxx.eat();}……}频繁修改代码,代码可扩展性、可维护性差,如何优化?使用多态优化设计

参数都是Pet类的子类可否使用一个feed(Petpet)实现对所有宠物的喂食?

多态:同一个引用类型,使用不同的实例而执行不同操作

使用多态实现思路

使用父类作为方法形参实现多态

使用多态优化主人给宠物喂食

publicclassMaster{//使用父类作为方法形参publicvoidfeed(Petpet){pet.eat();}}测试类的改变

Petpet=newDog();Mastermaster=newMaster();master.feed(pet);//同一种操作方式,不同的操作对象练习使用多态实现喂养宠物功能增加宠物猫并喂食,其健康值增加4

在继承章节汽车租赁系统的基础上,实现计算多种车辆总租金的功能现在有客户租用2辆宝马1辆别克商务舱1辆金龙(34)座租5天共多少租金?

1、创建车的对象,放在数组中

MotoVehile[]motos=newMotoVehile[4];motos[0]=newCar("宝马550i","京NY28588");motos[1]=newCar("宝马550i","京NNN328");motos[2]=newCar("别克林荫大道","京NY28588");motos[3]=newBus("金龙",34);2循环调用calcRent()方法,计算总租金

publicintcalcTotalRent(MotoVehile[]motos,intdays){inttotalRent=0;for(inti=0;i

1.创建卡车类,实现calcRent()方法2.修改统计租金代码

publicabstractclassMotoVehicle{privateStringno;//车牌号privateStringbrand;//品牌abstractintcalRent(intdays);//计算租金publicMotoVehicle(){}publicMotoVehicle(Stringno,Stringbrand){this.no=no;this.brand=brand;}publicStringgetNo(){returnno;}publicvoidsetNo(Stringno){this.no=no;}publicStringgetBrand(){returnbrand;}publicvoidsetBrand(Stringbrand){this.brand=brand;}}publicclassCarextendsMotoVehicle{publicCar(Stringno,Stringbrand){super(no,brand);}@OverrideintcalRent(intdays){if(getBrand().equals("宝马")){return500*days;}else{return600*days;}}}publicclassKacheextendsMotoVehicle{privateintdunwei;//吨位publicKache(intdunwei){this.dunwei=dunwei;}@OverrideintcalRent(intdays){return50*dunwei*days;}}不用多态的实现方式

Car[]cars=newCar[3];cars[0]=newCar("辽A12345","宝马");cars[1]=newCar("辽B22222","别克");cars[2]=newCar("辽A62222","奔驰");Kache[]kaches=newKache[2];kaches[0]=newKache(1);//150kaches[1]=newKache(4);//600inttotal=0;for(inti=0;i

THE END
1.当猫猫成为游戏搭子时,快放下鼠标,抱它!!老鼠00:34 女子在金多多APP玩0元购被骗,投资近10万 00:24 47岁女子放弃生意,回家照顾孩子学习 00:30 11月22日,河南洛阳,买车前4S店可享受报废补贴 00:19 女子面瘫,右边脸青紫,肿得明显,来河南看中医 00:22 河南郑州,民间疗法“滚鸡蛋”可以“治疗”感冒咳嗽 00:15 河南郑州,400万豪车贴寻亲启事的男子...https://www.163.com/v/video/VJFIMMFQU.html
2.萌宠我在B站云养狗推荐理由:作者生动有趣地向读者们推荐一种新颖的宠物养育方式“云养”,通过线上支持up主们养育各类萌宠,同时通过视频关注宠物的日常动态。对于因各种原因无法亲自养宠物的爱宠人士不失为一种暖心的“养育”方式。希望希望世界上的小生灵们都可以像视频中展现的那样,快乐地生活着。 https://www.jianshu.com/p/c00eab883da9
1.b站互动视频怎么做哔哩哔哩互动视频制作方法4、阅读互动视频功能介绍后,可以看到申请互动视频功能的步骤分为三个,查看完毕后点击“点击申请”按钮就可以申请了。 5、b站互动视频抛开高级功能外,很简单,而高级功能需要你的思维导图、逻辑、全局观、数值分析等。 以上就是小编带来的b站互动视频怎么做?哔哩哔哩互动视频制作方法,更多相关资讯教程,请关注3DM手游网。https://app.3dmgame.com/mip/gl/358320.html
2.B站弹幕宠物练级脚本或者B站自动发弹幕(b站弹幕姬)B站的弹幕宠物是一种创新的直播互动方式,(B站弹幕宠物练级脚本或者B站自动发弹幕(b站弹幕姬)实现途径都大差不差在直播间用脚本自动发弹幕就可以了),B站的弹幕宠物它允许观众通过发送弹幕指令来控制屏幕上的宠物进行各种动作,从而增加直播的趣味性和互动性。以下是对B站弹幕宠物的详细介绍: ...https://blog.csdn.net/qq_51408776/article/details/142340879