我对编译时类型(静态)和运行时类型(动态)类型有疑问。据我了解,如果子类重写某个超类的方法,然后在调用诸如Parent pTom = tom之类的东西时,则不得使用被重写的pTom方法,而必须实例化覆盖该方法的方法。
public class Parent {
int x = 0;
static void f() {
System.out.println("Ahem");
}
}
public class Child extends Parent {
int x = 5;
static void f() {
System.out.println("No way!");
}
public static void main(String[] args) {
Child tom = new Child();
System.out.println(tom.x); //output is No way!
Parent pTom = tom;
pTom.f();
System.out.println(pTom.x); //output is Ahem
}
}
您能帮助我阐明我的理解吗?