首页 > 解决方案 > 在 Java 中 subClass 和 SuperClass 具有相同的属性会发生什么?

问题描述

public class Test {

    public static void main(String[] args) {
        B b = new B();
        b.test();
    }

}

class A {
    String aString = "a";
    
    void test() {
        System.out.println(aString);
    }
}

class B extends A {
    String aString = "b";
}

为什么不能输入“b”?我只是认为b.test()会调用超类的方法,所以 b 将用户超类的属性。

标签: java

解决方案


为什么不能输入“b”?我只是认为b.test()会调用超类的方法,所以 b 将用户超类的属性。

Java 类和实例变量可以被继承,但它们不是虚拟的。也就是说,Java 代码中出现的所有变量标识符都是在编译时解析的——它们没有动态解析。

aString因此,方法中标识符的出现A.test()在编译时被解析aString为类的属性A。这是该方法的所有调用都将访问的属性,无论调用它的对象的实际类如何。如果您想在该类test()的实例上调用 B 类的属性时,请在类中提供 getter 方法AB通过A.test()这些方法获取字符串。


推荐阅读