《使用Java实现面向对象编程3第三章多态上机实操手册_1.docx》由会员分享,可在线阅读,更多相关《使用Java实现面向对象编程3第三章多态上机实操手册_1.docx(12页珍藏版)》请在第一文库网上搜索。
1、JAVAOOp第三章上机步骤上机练习一、使用多态实现主人给宠物喂食功能。a训练要点: 子类到父类的自动类型转换 使用父类作为方法形参实现多态 多态可以减少代码量,可以提高代码的可扩展性和可维护性0需求说明: 实现喂养宠物功能不同宠物吃的东西不同主人可以喂养不同类型宠物参考实现步骤:1、在cn.jbit.epel下新建ch03包 之后将ch02中的三个类COPY到Cho3中2、按书上要求实现“(1)给抽象类Pet增加抽象方法eat方法0;”修改PeI类,在最后加入此方法: /* 抽象方法eat (),负责宠物吃饭功能。* /public abstract void eat ();这时我们看到其它
2、两个类报错了,这是因为在父类中有的抽象方法,在子类必须重写实现。3、按书上要求实现“(2)让Dog类重写Pet类的eat方法0,实现狗狗吃饭功能”修改DOg类* 实现吃饭方法。* /Overridepublic void eat () super. setHealth (super. getHealth () +3) /取出原来的健康值+3,再赋值回 去。SyStem. out.printin (狗狗+super .getName () + ”吃饱啦!健康值增加3。 ”);4、按书上要求实现“(3)让Penguin类重写Pet类的eat方法0,实现企鹅吃饭 功能”修改 PengUin类 /*实
3、现吃饭方法。*/Overridepublic void eat () super.SetHealth(super.getHealth() +5);SyStem. out.Println (企鹅”+ super.getName () + 吃饱啦!健康值增加5。 ); )5、按书上要求实现 “(4)创建主人类MaSter,添加feed (Pet Pet)方法,在该方 法中调用相应宠物eat()方法,实现宠物的喂养”在ChO3包下新建MaSter.java类,添加两个属性,之后生成无参及有参构造,之后对属性进 行封装。在最后加入喂食的方法。完整代码如下: package cn.jbit. epet.
4、ch03;/ * * 主人类* 更多资源可在阿升老师的【与或非】公号中自行查找* /public class Master private String name = uu; / / 主人名字private int money = 0; / 元宝数 / * 无参构造* /public Master () super ();)* 有参构造* /public Master(String name, int money) super ();this. name = name; this.money = money;)* 主人给宠物喂食。此处是一个多态的方法,根据不同的子类对象实例而调用不同的方 法*
5、 /public void feed(Pet pet) pet .eat ();6、按书上要求实现“(5)创建测试类Test,在类中创建主人,狗狗和企鹅对象, 调用feed(Petpet)方法实现主人喂养宠物功能” Test包中建立测试类 TeStChO301.java代码如下:package cn.jbit. epet. test;import cn.jbit.epet.ch03.Dog;import cn.jbit.epet.ch03.Master;import cn.jbit. epet.ch03. Penguin;/ * 测试类,领养宠物并喂食。public class Testch0
6、301 (public static void main(String) args) Master master=new MaSter (王先生”,100) ;/创建主:人类,初始姓名及元宝 数Dog dog = new Dog(“欧欧”,“雪娜瑞”);/创建狗狗类,初始姓名及品种Penguin pgn = new PengUin (楠楠,,Q妹”);/创!建企鹅类,初始性名及性 别master, feed (dog) ; /主人给狗狗喂食master. feed (pgn);主人给企鹅喂食运行结果如下:执行宠物的有参构造方法。执行宠物的有参构造方法。狗狗欧欧吃饱啦!健康值增加3。企鹅楠楠吃饱
7、啦!健康值增加5。7、按书上要求实现“(6)增加宠物Cat类,继承Pet类,重写eat。方法” 在ChO3下新建Cat类并继承Pet类,代码如下: package cn.jbit. epet.ch03; / * 猫类,宠物的子类。 * /public class Cat extends Pet private String color;/颜色* 无参构造* /public Cat () super ();)* 有参构造* /public Cat(String name, String color) super(name);this. color = color;)public String g
8、etColor() return color;)public void setcolor(String color) this. color = color;* 实现吃饭方法。* /Overridepublic void eat () super.SetHealth(super.getHealth()+4);System, out.printin (,c + super .getName () +”吃饱啦!体力增加4。,);*重写父类的Print方法。*/0Overridepublic void print () / TODO Auto-generated method stub8、按书上要求
9、实现“(7)在测试类TeSt类中添加领养猫和给猫喂食语句,执行 TeSt类,观察运行结果”修改TeStChc)301类,增加下面两行代码Cat cat = new Cat (Tomcat,黄色);/仓IJ建猫类,即领养该宠物,初始姓名及颜色 master. feed (cat); 卜:人给猫喂食 运行后结果:执行宠物的有参构造方法。执行宠物的有参构造方法。狗狗欧欧吃饱啦!健康值增加3。企鹅楠楠吃饱啦!健康值增加5。 执行宠物的有参构造方法。猫咪TOnICat吃饱啦!体力增加4。O上机练习二、训练父类到子类的强制类型转换及instanceof运算符的使有用 需求说明:主人和狗狗玩接飞盘游戏,狗狗
10、健康值减少10,与主人亲密度增加5主人和企鹅玩游泳游戏,企鹅健康值减少10,与主人亲密度增加5 0提示: Dog类添加CatChingFIyDiSCO方法,实现接飞盘功能Penguin类添加SWimming()方法,实现游泳功能,主人添加play(Pet Pet)方法如果Pet代表DOg就玩接飞盘游戏如果pet代表Penguin就玩游泳游戏实现步骤(1)绚DOg类添加CalChingFIyDiSC()方法,实现接飞盘功能。 修改Dog类/* 实现接飞盘方法* /public void CatchingFlyDisc() SyStem. out.Println (狗狗,+ super. getN
11、ame () + ”正在接飞盘。,);super. SetHealth (super.getHealth () -10) ; /健康值减少 10super. setLove (super.getLove () +5) /亲密度增加5(2)给PengUin类添加SWimming()方法,实现游泳功能。修改enguin类/* 实现游泳方法* /public void swimming () SyStem. out.printin (企鹅,+ super. getName () + ”正在游泳。,); super. setHealth (super. getHealth () -10) ;/健康值减
12、少 Io super. setLove (super. getLove ()+5) ; /亲密度增加5)(3)给.主人添加play(Pet Pel)方法,如果pet代表Dog就玩接飞盘游戏;如果pet代表Penguin 就玩游泳游戏。修改噩如蜀类/* 主人与宠物玩耍* /public void play(Pet pet) if (pet instanceof DOg) /如果传入的是狗狗DOg dog = (Dog) pet;dog.CatchingFlyDisc(); )else if (pet instanceof Penguin) /如果传入的是企鹅Penguin pgn = (Peng
13、uin) pet;pgn. swimming (); )(4)编写测试类,在test包下新建TeStChO302.java package cn.jbit. epet. test;import cn.jbit.epet.ch03.Dog;import cn.jbit.epet.ch03.Master;import cn.jbit. epet.ch03. Penguin;/ * *测试类,领养宠物并玩耍。*/public class Testch0302 public static void main(String args) Dog dog = new Dog(“欧欧“,“雪娜瑞”); Pen
14、guin pgn = new PengUin(楠楠,Q妹”); Master master=new Master (E5fc.z 100); master .play (dog) ; /狗狗接飞盘 master .play (pgn); 企鹅游运行结果如下:执行宠物的有参构造方法。 执行宠物的有参构造方法。 狗狗欧欧正在接飞盘。企鹅楠楠正在游泳。上机练习三、计算一次租赁多辆汽车的总租金O训练要点:多态的使用使用父类类型作为方法参数O需求说明:在前面汽车租赁系统的基础上,实现计算多种车辆总租金的功能现在有客户租用: 2辆宝马1 1辆别克商务舱 1辆金龙(34)座租5天共多少租金?参考实现步骤:1、在这里我们复用第二章的代码,在cn.jbit.car包下新建一个顾客类CUStOmer,提供 CalCTotalRent(MOtoVehiCIemOtos, int days)方法(参数 MOtOVehiCIe 代表汽车的父类),传入 的参数是客户租赁的汽车列表信息和租赁天数,在方法中调用相应汽车的计算租金的方法 ca!rRent(int days)方法得到相应租赁价,求和计算出多输汽车总租赁价格。代码如下:package cn.jbit.car;/ *客户类。*/public class Customer String id;/客户编号 Strin