目录
一、运用多态解决宠物喂食问题
原理分析
运行测试
运行结果
分析
增加宠物和食物种类
Pig类
Rice类
测试
运行结果
一、运用多态解决宠物喂食问题
改变Master类的feed方法的参数列表
package com.hspedu.poly_;
public class Master {
    private String name;
    public Master(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
    public void feed(Animal animal, Food food){
       System.out.println("主人" + name + "给"+ animal.getName() + "喂" + 
                food.getName());
    }
}
原理分析
1)animal的编译类型是Animal,可以指向(接收)Animal子类的对象
2)food的编译类型是Food,可以指向(接收)Food子类的对象
运行测试
在Poly01.java中测试,为了区分加~
package com.hspedu.poly_;
public class Poly01 {
    public static void main(String[] args) {
        Master master = new Master("小李");
        Dog spike = new Dog("Spike~");
        Bone bone = new Bone("大骨头~");
        
        master.feed(spike,bone);
        Cat tom = new Cat("Tom~");
        Fish fish = new Fish("鱼罐头~");
        master.feed(tom,fish);
    }
}
运行结果

分析
因为spike是Dog类的对象,Dog类是Animal的子类,Animal可以接收子类的对象的传参;bone传参的原理也是如此
增加宠物和食物种类
增加宠物Pig类继承Aniaml类,增加食物Rice类,继承Food类,别的都不需要,在Poly01中直接创建新对象然后调用feed方法即可,这就是多态的便利
Pig类
package com.hspedu.poly_;
public class Pig extends Animal{
    public Pig(String name) {
        super(name);
    }
}
Rice类
package com.hspedu.poly_;
public class Rice extends Food{
    public Rice(String name) {
        super(name);
    }
}
测试
package com.hspedu.poly_;
public class Poly01 {
    public static void main(String[] args) {
        Master master = new Master("小李");
        Dog spike = new Dog("Spike~");
        Bone bone = new Bone("大骨头~");
        master.feed(spike,bone);
        Cat tom = new Cat("Tom~");
        Fish fish = new Fish("鱼罐头~");
        System.out.println("===============");
        master.feed(tom,fish);
        Pig pig = new Pig("猪猪侠");
        Rice rice = new Rice("八宝饭");
        System.out.println("============");
        master.feed(pig,rice);
    }
}
运行结果




















