多态的应用(父类作为方法的形参和父类作为方法的返回值)

使用父类作为方法的形参

这里的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 类型的数组可以存储 BusCarSedan 类型的对象,是因为这两个类都继承了 Car 类。

数组可以存储其元素的任何子类实例。

 private Moto motos[] = new Moto[8];

    public void info(){
        motos[0] = new Sedan("京NY28588", "宝马", 800,"X6");
        motos[1] = new Bus("京6566754", "金杯", 800,16);
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值