2、在课上案例的基础上实现与宠物玩耍功能
需求说明:
主人和狗狗玩接飞盘游戏,狗狗健康值减少10,与主人亲密度增加5
主人和企鹅玩游泳游戏,企鹅健康值减少10,与主人亲密度增加5
提示:
Dog类添加catchingFlyDisc()方法,实现接飞盘功能
Penguin类添加swimming()方法,实现游泳功能
主人添加play(Pet pet)方法
如果pet代表Dog就玩接飞盘游戏
如果pet代表Penguin就玩游泳游戏
1 package day12; 2 3 public class Master { 4 5 private String hostName; 6 7 public String getHostName() { 8 return hostName; 9 } 10 11 public void setHostName(String hostName) { 12 this.hostName = hostName; 13 } 14 15 public Master(String hostName) { 16 super(); 17 this.hostName = hostName; 18 } 19 20 public Master() { 21 super(); 22 } 23 24 //给狗喂食 25 public void feed(Dog dog){ 26 dog.eat(); 27 } 28 29 public void feed(Penguin p){ 30 p.eat(); 31 } 32 //和宠物玩 33 public void play(Pet pet){ 34 //子类对象的多态性,父类的引用指向子类的实例 35 //pet对象可以调用swimming方法吗 不会 36 //就想调用swimming方法 37 //把pet转成dog对象,强制类型转换 38 39 //编译期间,程序会把p1看做是宠物类对象 40 if(pet instanceof Dog){//判断pet是否指向子类Dog的实例 41 Dog dog=(Dog)pet;//向下转型 42 dog.catchingFlyDisc(); 43 }else if(pet instanceof Penguin){ 44 Penguin pg=(Penguin)pet; 45 pg.swimming(); 46 } 47 48 } 49 50 }
package day12; //宠物类 public class Pet { private String name;//名字 protected int health=100;//健康值 protected int Intimacy=100;//亲密度 public int getIntimacy() { return Intimacy; } public Pet(String name, int health, int intimacy) { super(); this.name = name; this.health = health; Intimacy = intimacy; } public void setIntimacy(int intimacy) { Intimacy = intimacy; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getHealth() { return health; } public void setHealth(int health) { this.health = health; } public Pet(String name, int health) { super(); this.name = name; this.health = health; } public Pet(String name) { super(); this.name = name; } public Pet(int health) { super(); this.health = health; } public Pet() { super(); } //输出属性值 public void info(){ System.out.println("姓名为:"+this.name+",健康值为:"+this.health); } //吃饭的方法 public void eat(){ System.out.println("宠物吃饭"); } }
1 package day12; 2 3 public class Dog extends Pet { 4 5 private String starin;//品种 6 7 public String getStarin() { 8 return starin; 9 } 10 11 public void setStarin(String starin) { 12 this.starin = starin; 13 } 14 15 public Dog(String name, String starin) { 16 super(name); 17 this.starin = starin; 18 } 19 20 public Dog() { 21 super(); 22 } 23 24 //重写吃饭的方法 25 public void eat(){ 26 super.health+=3; 27 System.out.println("狗狗吃饱了,健康值加3,健康值为:"+super.health); 28 } 29 30 public void info(){ 31 super.info();//调用父类未重写 32 System.out.println("品种为:"+this.starin); 33 } 34 //接飞盘方法 35 public void catchingFlyDisc(){ 36 super.health-=10; 37 super.Intimacy+=5; 38 System.out.println("狗狗完成接飞盘游戏,健康值-10,亲密度+5,健康值为"+health+",亲密度为"+Intimacy); 39 } 40 //测试 41 public void sleep(){ 42 System.out.println("狗在呼呼大睡"); 43 } 44 }
1 package day12; 2 3 public class Penguin extends Pet { 4 5 private String sex; 6 7 public String getSex() { 8 return sex; 9 } 10 11 public void setSex(String sex) { 12 this.sex = sex; 13 } 14 15 public Penguin(String name, String sex) { 16 super(name); 17 this.sex = sex; 18 } 19 20 public Penguin() { 21 super(); 22 23 } 24 //重写吃饭的方法 25 public void eat(){ 26 super.health+=5; 27 System.out.println("企鹅吃饱了,健康值加5,健康值为:"+super.health); 28 } 29 //游泳方法 30 public void swimming(){ 31 super.health-=10; 32 super.Intimacy+=5; 33 System.out.println("企鹅完成游泳游戏,健康值-10,亲密度+5,健康值为"+health+",亲密度为"+Intimacy); 34 } 35 36 public void info(){ 37 super.info();//调用父类未重写 38 System.out.println("性别为:"+this.sex); 39 } 40 41 42 }
1 package day12; 2 /** 3 * 1.什么是多态?一个对象的多种形态 4 * 2.多态的体现? 5 * (1)方法的重载和重写 6 * (2)继承和接口的实现:子类对象的多态性:父类的引用指向子类的实例 Pet p=new Dog() 7 * 8 * 3.程序分为两种状态,编译状态,运行状态 9 * 对多态来说,编译时看左边的内容,讲变量看做是宠物类类型 10 * 运行时看右边,真正执行的对象,就是子类对象,执行时执行的是子类对象重写的方法 11 */ 12 13 public class Test { 14 15 public static void main(String[] args) { 16 17 //宠物 18 Pet p=new Pet("小白"); 19 p.eat(); 20 p.info(); 21 22 System.out.println("======================================"); 23 Dog d=new Dog("小毛", "金毛"); 24 d.info(); 25 d.catchingFlyDisc(); 26 System.out.println("======================================"); 27 System.out.println("======================================"); 28 Penguin pg=new Penguin("Q妹","女"); 29 pg.swimming(); 30 pg.info(); 31 32 System.out.println("======================================"); 33 Master m=new Master(); 34 m.feed(d); 35 m.feed(pg); 36 //调用游戏方法,判断主人和谁玩游戏 37 m.play(d); 38 m.play(pg); 39 40 } 41 42 }
运行截图:
相关知识
Java笔记:多态polymorphic
27.练习:多态:多态实现宠物店领养宠物
java 多态
多态
(java)多态
Object类、多态
【Java学习记录】十二 Java中的多态
Java 面向对象——多态(上)
多态应用
举例理解java的多态,通俗,易懂
网址: JAVA多态练习 https://m.mcbbbk.com/newsview251352.html
上一篇: 当代年轻人养宠物,不知道是宠物宠 |
下一篇: 女子与狗共用餐具引争议 多方回应 |