public class DuoTai {
public static void main(String[] args) {
Master master = new Master();
Cat tom = new Cat(); // 6-7行代码与第8行的代码功能一样
master.feed(tom);
// master.feed(new Cat()); // 相当于feed(Pet pet = new Cat()) 父类型引用指向子类型对象/向上转型
Dog erHa = new Dog();
master.feed(erHa);
// master.feed(new Dog()); // 相当于feed(Pet pet = new Dog()) 父类型引用指向子类型对象/向上转型
Parrot baGe = new Parrot();
master.feed(baGe);
// master.feed(new Parrot());
}
}
class Pet {
public void eat() {
}
}
class Cat extends Pet {
public void eat() {
System.out.println("小猫在吃鱼。");
}
}
class Dog extends Pet {
public void eat() {
System.out.println("小狗在啃骨头。");
}
}
class Master { // Master面向抽象的Pet 不再面向具体的宠物
public void feed(Pet pet) {
pet.eat(); //编译阶段编译器检查Pet.class的feed()方法 运行阶段调用具体对象中(继承过去)的feed()方法
}
}
class Parrot extends Pet { // 增加新的宠物 Master不需要增加新的方法 降低耦合度 提高拓展力
public void eat() {
System.out.println("鹦鹉在吃谷物。");
}
}
javase:多态
最新推荐文章于 2024-07-19 17:37:28 发布