多态的概述
事物存在的多种形态
多态的前提
- 要有继承关系
- 要有方法重写
- 要有父类引用指向子类对象
public class TestJavaSE {
public static void main(String[] args) {
Father s1 = new Son();//父类引用指向子类对象
s1.print();
}
}
class Father {
public void print(){
System.out.println("Father 的print方法");
}
}
class Son extends Father{
public void print(){
System.out.println("Son 的print方法");
}
}
多态中的成员访问
成员变量
编译看父类,运行看父类 。
区别于普通继承:子类 son = new 子类();
成员方法
编译看父类,执行看子类。动态绑定
静态成员方法
编译看父类,运行看父类
静态和类相关,算不上重写,所以访问的还是父类;只有非静态的成员方法,编译看父类,运行看子类
多态中的向上转型和向下转型
Father f = new Son();//向上转型:父类引用指向子类对象
Son s = (Son)f;//向下转型
关键字:instanceof
a instanceof B:判断 a 引用是否是B数据类型
多态的好处和弊端
好处:
- 提高了代码的维护性(继承保证)
- 提高了代码的扩展性(多态保证),一般作为参数传递
弊端:
- 不能使用子类特有的属性和行为。如果需要使用,需要向下转型