多态的特性, 成员变量和静态方法编译运行都取决于父类, 非静态成员方法编译看父类运行看子类。
(多态中,非静态成员方法运行的是子类中覆盖父类的同名方法(如果有),其他成员编译和运行都看父类。)
(静态成员属于类,不属于对象,和对象无关。静态成员只与类(类型)有关,和对象无关)
Test.java(测试类):
package cn.xx.demo;
/*
* 多态中,成员特点
*
* 成员变量:
* 编译的时候, 参考父类中有没有这个变量,如果有,编译成功,没有编译失败
* 运行的时候, 运行的是父类中的变量值
* 编译运行全看父类
*
* 成员方法:
* 编译的时候, 参考父类中有没有这个方法,如果有,编译成功,没有编译失败
* 运行的时候, 运行的是子类的重写方法
*
* 编译看父类,运行看子类
*/
public class Test {
public static void main(String[] args) {
Fu f = new Zi();
System.out.println(f.a); // 父类的变量a的值
f.show(); // 子类的方法show
}
}
Fu.java(父类):
package cn.xx.demo;
public class Fu {
int a = 1;
public void show(){
System.out.println("父类方法"+this.a);
}
}
Zi.java(子类):
package cn.xx.demo;
public class Zi extends Fu{
int a = 2;
public void show(){
System.out.println("子类方法"+this.a);
}
}