class A {int x = 5;}
class B extends A {int x = 10;}
class D {
public static void main(String[] args){
A b0 = new B();
System.out.print(b0.x);
}
}
我很奇怪,为什么这个代码打印的5而不是10静态实例变量查找的Java
如果我不是写以下,将变量x的方法,它的工作原理更是我所期待,并打印出10,因为在编译时只检查b0的静态类型A是否有方法x,然后在运行时使用b0的动态类型B来运行x。
class A {int x() {return 5;}}
class B extends A {int x() {return 10;}}
class D {
public static void main(String[] args){
A b0 = new B();
System.out.print(b0.x());
}
}
我的理论是,实例变量静态查找不像方法,但我不知道为什么会这样。
谢谢!