目录:
- 什么是多态
- 为什么要用多态
- 上转型
- 下转型
什么是多态
父类类型的变量指向子类创建的对象,使用该变量调用父类中一个被子类重写的方法,则父类中的方法呈现出不同的行为特征,这就是多态。
简单的来说编译时方法行为表现的是父类中的方法,运行时方法行为表现的是子类中重写该方法的行为特征
再通俗一点就是编译时一种状态,运行时一种状态,这就叫多态。
为什么要用多态
实现代码的复用,避免代码的冗余。
举个例子:
先定义一个父类对象:
再定义三个子类:
再定义一个测试类Test:
我们会发现代码过于冗余,现在我们可以用上转型来实现代码的复用:
public static void main(String[] args) {
Mammal mammal1 = new Dog();
Mammal mammal2 = new Whale();
Mammal mammal3 = new Bat();
mammal1.move();
mammal2.move();
mammal3.move();
}
上转型
子类实例化的对象赋值给父类声明变量,则该对象称为上转型对象,这个过程称为对象上转型。
注:
1.上转型对象不能操作子类新增的成员变量;不能调用子类新增的方法
2.上转对象调用父类方法,如果该方法已被子类重写,则表现子类重写后的行为特征。否则表现父类的行为特征。
3.使用上转型对象调用成员变量,无论该成员变量是否已经被子类覆盖,使用的都是父类中的成员变量
下转型
可以将上转型对象再强制转换为创建该对象的子类类型的对象,即将上转型对象还原为子类对象,对应于数据类型转换中的强制类型转换。
还原后的对象又具备了子类所有属性和功能,即可以操作子类中继承或新增的成员变量,可以调用子类中继承或新增的方法。
注意:不可以将父类创建的对象通过强制类型转换赋值给子类声明的变量。
public class Mammal {
public void move() {
System.out.println("哺乳动物移动");
}
}