java – 继承和类成员

已知:

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重写行为.

上一篇:使用C#泛型扩展?


下一篇:java – final和非final方法参数,它们被视为不同,用于确定方法重载或覆盖?