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 }
運行截圖: