《使用Java实现面向对象编程3第三章多态(上机实操手册)_1.docx》由会员分享,可在线阅读,更多相关《使用Java实现面向对象编程3第三章多态(上机实操手册)_1.docx(12页珍藏版)》请在第一文库网上搜索。
1、JAVAOOp第三章上机步骤上机练习一、使用多态实现主人给宠物喂食功能。a训练要点: 子类到父类的自动类型转换使用父类作为方法形参实现多态 多态可以减少代码量,可以提高代码的可扩展性和可维护性0需求说明: 实现喂养宠物功能不同宠物吃的东西不同主人可以喂养不同类型宠物参考实现步骤:1、在cn.jbit.epe1下新建ch03包之后将ch02中的三个类COPY到Cho3中2、按书上要求实现“(1)给抽象类Pet增加抽象方法eat方法0;”修改PeI类,在最后加入此方法:/* 抽象方法eat(),负责宠物吃饭功能。* /pub1icabstractvoideat();这时我们看到其它两个类报错了,这
2、是因为在父类中有的抽象方法,在子类必须重写实现。3、按书上要求实现“(2)让Dog类重写Pet类的eat方法0,实现狗狗吃饭功能”修改DOg类* 实现吃饭方法。* /Overridepub1icvoideat()super.setHea1th(super.getHea1th()+3)/取出原来的健康值+3,再赋值回去。SyStem.out.printin(狗狗+super.getName()+”吃饱啦!健康值增加3。”);4、按书上要求实现“(3)让Penguin类重写Pet类的eat方法0,实现企鹅吃饭功能”修改PengUin类/*实现吃饭方法。*/Overridepub1icvoideat
3、()super.SetHea1th(super.getHea1th()+5);SyStem.out.Print1n(企鹅”+super.getName()+吃饱啦!健康值增加5。);)5、按书上要求实现“(4)创建主人类MaSter,添加feed(PetPet)方法,在该方法中调用相应宠物eat()方法,实现宠物的喂养”在ChO3包下新建MaSter.java类,添加两个属性,之后生成无参及有参构造,之后对属性进行封装。在最后加入喂食的方法。完整代码如下:packagecn.jbit.epet.ch03;/* 主人类* 更多资源可在阿升老师的【与或非】公号中自行查找* /pub1icc1ass
4、MasterprivateStringname=uu;/主人名字privateintmoney=0;/元宝数/* 无参构造* /pub1icMaster()super();)* 有参构造* /pub1icMaster(Stringname,intmoney)super();this.name=name;this.money=money;)* 主人给宠物喂食。此处是一个多态的方法,根据不同的子类对象实例而调用不同的方法* /pub1icvoidfeed(Petpet)pet.eat();6、按书上要求实现“(5)创建测试类Test,在类中创建主人,狗狗和企鹅对象,调用feed(Petpet)方法
5、实现主人喂养宠物功能”Test包中建立测试类TeStChO301.java代码如下:packagecn.jbit.epet.test;importcn.jbit.epet.ch03.Dog;importcn.jbit.epet.ch03.Master;importcn.jbit.epet.ch03.Penguin;/* 测试类,领养宠物并喂食。pub1icc1assTestch0301(pub1icstaticvoidmain(String)args)Mastermaster=newMaSter(王先生”,100);/创建主:人类,初始姓名及元宝数Dogdog=newDog(“欧欧”,“雪娜瑞
6、”);/创建狗狗类,初始姓名及品种Penguinpgn=newPengUin(楠楠,,Q妹”);/创!建企鹅类,初始性名及性别master,feed(dog);/主人给狗狗喂食master.feed(pgn);主人给企鹅喂食运行结果如下:执行宠物的有参构造方法。执行宠物的有参构造方法。狗狗欧欧吃饱啦!健康值增加3。企鹅楠楠吃饱啦!健康值增加5。7、按书上要求实现“(6)增加宠物Cat类,继承Pet类,重写eat。方法”在ChO3下新建Cat类并继承Pet类,代码如下:packagecn.jbit.epet.ch03;/* 猫类,宠物的子类。* /pub1icc1assCatextendsPet
7、privateStringco1or;/颜色* 无参构造* /pub1icCat()super();)* 有参构造* /pub1icCat(Stringname,Stringco1or)super(name);this.co1or=co1or;)pub1icStringgetCo1or()returnco1or;)pub1icvoidsetco1or(Stringco1or)this.co1or=co1or;* 实现吃饭方法。* /Overridepub1icvoideat()super.SetHea1th(super.getHea1th()+4);System,out.printin(,c+
8、super.getName()+”吃饱啦!体力增加4。,);*重写父类的Print方法。*/0Overridepub1icvoidprint()/TODOAuto-generatedmethodstub8、按书上要求实现“(7)在测试类TeSt类中添加领养猫和给猫喂食语句,执行TeSt类,观察运行结果”修改TeStChc)301类,增加下面两行代码Catcat=newCat(Tomcat,黄色);/仓IJ建猫类,即领养该宠物,初始姓名及颜色master.feed(cat);卜:人给猫喂食运行后结果:执行宠物的有参构造方法。执行宠物的有参构造方法。狗狗欧欧吃饱啦!健康值增加3。企鹅楠楠吃饱啦!健
9、康值增加5。执行宠物的有参构造方法。猫咪TOnICat吃饱啦!体力增加4。O上机练习二、训练父类到子类的强制类型转换及instanceof运算符的使有用需求说明:主人和狗狗玩接飞盘游戏,狗狗健康值减少10,与主人亲密度增加5主人和企鹅玩游泳游戏,企鹅健康值减少10,与主人亲密度增加50提示:Dog类添加CatChingFIyDiSCO方法,实现接飞盘功能Penguin类添加SWimming()方法,实现游泳功能,主人添加p1ay(PetPet)方法如果Pet代表DOg就玩接飞盘游戏如果pet代表Penguin就玩游泳游戏实现步骤(1)绚DOg类添加Ca1ChingFIyDiSC()方法,实现接
10、飞盘功能。修改Dog类/* 实现接飞盘方法* /pub1icvoidCatchingF1yDisc()SyStem.out.Print1n(狗狗,+super.getName()+”正在接飞盘。,);super.SetHea1th(super.getHea1th()-10);/健康值减少10super.set1ove(super.get1ove()+5)/亲密度增加5(2)给PengUin类添加SWimming()方法,实现游泳功能。修改enguin类/* 实现游泳方法* /pub1icvoidswimming()SyStem.out.printin(企鹅,+super.getName()+”
11、正在游泳。,);super.setHea1th(super.getHea1th()-10);/健康值减少Iosuper.set1ove(super.get1ove()+5);/亲密度增加5)(3)给.主人添加p1ay(PetPe1)方法,如果pet代表Dog就玩接飞盘游戏;如果pet代表Penguin就玩游泳游戏。修改噩如蜀类/* 主人与宠物玩耍* /pub1icvoidp1ay(Petpet)if(petinstanceofDOg)/如果传入的是狗狗DOgdog=(Dog)pet;dog.CatchingF1yDisc();)e1seif(petinstanceofPenguin)/如果传入
12、的是企鹅Penguinpgn=(Penguin)pet;pgn.swimming();)(4)编写测试类,在test包下新建TeStChO302.javapackagecn.jbit.epet.test;importcn.jbit.epet.ch03.Dog;importcn.jbit.epet.ch03.Master;importcn.jbit.epet.ch03.Penguin;/*测试类,领养宠物并玩耍。*/pub1icc1assTestch0302pub1icstaticvoidmain(Stringargs)Dogdog=newDog(“欧欧“,“雪娜瑞”);Penguinpgn=n
13、ewPengUin(楠楠,Q妹”);Mastermaster=newMaster(E5fc.z100);master.p1ay(dog);/狗狗接飞盘master.p1ay(pgn);企鹅游运行结果如下:执行宠物的有参构造方法。执行宠物的有参构造方法。狗狗欧欧正在接飞盘。企鹅楠楠正在游泳。上机练习三、计算一次租赁多辆汽车的总租金O训练要点:多态的使用使用父类类型作为方法参数O需求说明:在前面汽车租赁系统的基础上,实现计算多种车辆总租金的功能现在有客户租用:2辆宝马11辆别克商务舱1辆金龙(34)座租5天共多少租金?参考实现步骤:1、在这里我们复用第二章的代码,在cn.jbit.car包下新建一
14、个顾客类CUStOmer,提供Ca1CTota1Rent(MOtoVehiCIemOtos,intdays)方法(参数MOtOVehiCIe代表汽车的父类),传入的参数是客户租赁的汽车列表信息和租赁天数,在方法中调用相应汽车的计算租金的方法ca!rRent(intdays)方法得到相应租赁价,求和计算出多输汽车总租赁价格。代码如下:packagecn.jbit.car;/*客户类。*/pub1icc1assCustomerStringid;/客户编号Stringname;/客户姓* 无参构造*/pub1icCustomer()super();)* 有参构造方法。* 0paramid客户编号* paramname客户姓名* /pub1icCustomer(Stringid,Stringname)super();this.id=id;this.name=name;pub1icStringget1d()returnid;pub1icvoidset1d(Stringid)this.id=id;pub1icStringgetName()returnname;pub1icvoidsetName(Stringname)this.name=name;