在宠物管理系统中,宠物饿了,需要主人给他喂食,不同的宠物吃不一样的东西,并且健康值恢复情况也不一样。
狗狗:吃狗粮,吃完后健康值增加3。
企鹅:吃鱼,吃完后健康值增加5。
问题分析:
狗狗类:增加狗狗吃食的方法
企鹅类:增加企鹅吃食的方法
创建主人类:编写给狗狗喂食的方法,编写给企鹅喂食的方法
编写测试方法:调用主人类给狗狗喂的方法,调用主人类给企鹅喂的方法
编码实现
publicclassMaster{publicvoidfeed(Dogdog){dog.eat();}publicvoidfeed(Penguinpgn){pgn.eat();}publicvoidfeed(XXXxxx){//如果增加其他宠物…….xxx.eat();}}
编码实现存在的问题
都是打印机,但是不同类型的打印机,打印出的效果是不同的。
同一事物,由于条件不同,产生的结果也是不同的。
多态:同一个引用类型,使用不同的实例而执行不同操作。程序中使用父类定义引用,使用子类对象运行。
feed(Petpet);//pet实际指向dog、penguin、cat等对象
向上转型:Petpet=newDog();//自动类型转换
使用父类作为方法形参实现多态
使用父类作为方法返回值实现多态
使用多态实现宠物管理系统的喂食。
增加猫,猫吃猫粮,健康值增加5。
使用父类作为方法返回值
实现思路
在Master类添加领养方法getPet(StringtypeId)
创建测试类,根据主人选择宠物类型编号来领养宠物。
问题描述
实现主人与宠物玩耍功能
和狗狗玩接飞盘游戏,狗狗的健康值减少10,与主人亲密度增加5。
和企鹅玩游泳游戏,企鹅的健康值减少10,与主人亲密度增加5。
问题分析
给Dog添加接飞盘方法catchingFlyDisc()
给Penguin添加游泳方法swimming()
给主人添加play(Petpet)方法
代码实现以及问题
向下转型(强制类型转换)
为了避免类型转换报错,使用instanceof运算符进行类型判断,判断的结果为布尔值类型。
语法结构:
对象instanceof类或接口
使用场合:instanceof通常和强制类型转换结合使用。
优化宠物管理系统,使用多态实现主人领养宠物并与宠物玩耍。