使用父类作为方法的形参
这里的dog和peguin都继承Pet类,cure方法的形参是Pet类型,我们传入的是peguin和dog,然后peguin和dog进入cure方法并且分别调它们的重写方法eatFood。
- 即使 声明形参是
pet
,实际调用eatFood
方法时,会执行 Dog 类和Peguin中的实现。 - 这是因为在运行时,JVM根据对象的实际类型来决定调用哪个
eatFood
方法,这种机制体现了多态的动态绑定特性。
Dog dog = new Dog(99);
Pet penguin = new Penguin(60);
Master master = new Master();
master.cure(penguin);
master.cure(dog);
public class Master {
public void cure(Pet pet) {
pet.eatFood();
}
}
使用父类作为方法的返回值
返回值是Pet类型,但是可以返回dog和peguin类型
public Pet getResult(Pet pet){
if(xxxxx){ return dog; }
if(xxx){ return peguin; }
}
dog传入的时候以子类的形式传进去,返回值也是以子类的形式传出来
Dog dog = new Dog();
Pet newPet = dog.getResult;
数组多态:
Car
类型的数组可以存储 BusCar
和 Sedan
类型的对象,是因为这两个类都继承了 Car
类。
数组可以存储其元素的任何子类实例。
private Moto motos[] = new Moto[8];
public void info(){
motos[0] = new Sedan("京NY28588", "宝马", 800,"X6");
motos[1] = new Bus("京6566754", "金杯", 800,16);
}