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 }

运行截图:

原文地址:https://www.cnblogs.com/yumu77/p/13708196.html