已知:
class A
{
String s = "A";
}
class B extends A
{
String s = "B";
}
public class C
{
public static void main(String[] args){ new C().go();}
void go()
{
A a = new B();
System.out.println(a.s);
}
}
题:
运行此代码时JVM背后的机制是什么?为什么a.s打印回“A”.
解决方法:
字段引用不受多态性的影响,因此在编译时编译器引用A的字段,因为您的局部变量是A类型.
换句话说,字段行为就像方法上的Java重载行为,而不是Java重写行为.