多态:同一事物在不同时刻下体现出来的不同状态
- 举例:猫是猫,猫是动物
- 水(液体,固体,气态)
多态的前提:
- A:要有继承关系
- B:要有方法重写(其实没有也是可以的,但是如果没有这个,就没有意义)
- C:要有父类引用指向子类(父 f = new 子类();
下面,我们通过代码验证多态中的成员访问特点:
A:成员变量
编译左边 看:父 f = new Zi() 中的f
运行看左边 看Fu中的num
B:构造方法
创建子类对象的时候,访问父类的构造方法,对父类数据进行初始化。
C:成员方法
编译看左边 fu中没有method的方法,所以报错
运行看右边
D:静态方法
编译看左边
运行看左边 都看父
(静态和类相关,算不上重写,所以访问的还是左边的)
由于成员方法存在方法重写,所以它运行看右边
代码:
class Fu {
public int num = 100;
public void show() {
System.out.println("show Fu");
}
public static void function() {
System.out.println("function Fu");
}
}
class Zi extends Fu {
public int num = 1000;
public int num2 = 200;
public void show() {
System.out.println("show Zi");
}
public void method() {
System.out.println("method Zi");
}
public static void function() {
System.out.println("function Zi");
}
}
class DuoTaiDemo {
public static void main(String[] args) {
//要有父类引用指向子类
//父 f = new Zi();
Fu f = new Zi();
System.out.println(f.num);
// 找不到符号
//System.out.println(f.num2);
f.show();
// 找不到符号
//f.method();
f.function();
}
}