多态
假设有一个person类,类里面有一个have方法,参数是一个动物类,参数为狗类时输出汪汪,参数为猫类时输出喵喵。参数为其他动物时,输出其他。
那么你怎么定义这个方法,利用重载吗?
如果只有两种动物类,可以用重载,如果有200种动物呢,写200个方法吗?显然是效率低下的。
这时候我们可以用多态来解决。
多态举例
定义一个动物类
定义一个狗类一个猫类,继承动物类,并重写动物类的speak方法
定义一个person类,类中定义一个have方法,方法中调用动物类的speak方法
运行main函数
have方法,传了两个不同的对象作为参数,第一个dog类,第二个cat类,这俩个类都是animal的子类
输出分别是汪汪和喵喵
在person类中,have方法定义的参数类型是animal。这就是多态的用法。
上转型变量
Animal animal = new Dog();
animal即为上转型变量
//父类引用指向子类实例
//子类对象赋给父类引用
//上转型变量特点:
//1.可以访问从父类继承下来的属性和方法 但不能访问子类特有的属性和方法
//2.如果子类将父类的属性和方法重写了 则访问的是重写后的
//3.可以强制转换为子类类型