目录
一、运用多态解决宠物喂食问题
原理分析
运行测试
运行结果
分析
增加宠物和食物种类
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);
}
}