Java 多态

时间:2023-02-25 07:59:56


多态

假设有一个person类,类里面有一个have方法,参数是一个动物类,参数为狗类时输出汪汪,参数为猫类时输出喵喵。参数为其他动物时,输出其他。
那么你怎么定义这个方法,利用重载吗?

package com.wowowo.java;

public class Person {

public void have(Dog dog) {
dog.speak();
}
public void have(Cat cat) {
cat.speak();
}


}

如果只有两种动物类,可以用重载,如果有200种动物呢,写200个方法吗?显然是效率低下的。
这时候我们可以用多态来解决。

多态举例

定义一个动物类

Java 多态

定义一个狗类一个猫类,继承动物类,并重写动物类的speak方法

Java 多态

Java 多态

定义一个person类,类中定义一个have方法,方法中调用动物类的speak方法

Java 多态

运行main函数

have方法,传了两个不同的对象作为参数,第一个dog类,第二个cat类,这俩个类都是animal的子类

输出分别是汪汪和喵喵

在person类中,have方法定义的参数类型是animal。这就是多态的用法。

Java 多态

上转型变量

Animal animal = new Dog();
animal即为上转型变量
//父类引用指向子类实例
//子类对象赋给父类引用
//上转型变量特点:
//1.可以访问从父类继承下来的属性和方法 但不能访问子类特有的属性和方法
//2.如果子类将父类的属性和方法重写了 则访问的是重写后的
//3.可以强制转换为子类类型