JAVA多態練習_實現主人喂寵物吃飯,和其玩耍功能


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 }

運行截圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM