我有两个Java类,其中一个从其​​他类继承。它们有点像以下内容:

A.java:

public class A {
    public String invocations[] = {"foo"};

    public A() {
        // do stuff
    }
}


B.java:

public class B extends A {
    public String invocations = {"bar", "baz"};

    public B() {
        super();
    }
}


在此示例中,假设我创建了B的实例并获取其invocations属性,它将返回{"foo"}而不是预期的{"bar", "baz"}。为什么会这样,如何获得{"bar", "baz"}

最佳答案

您有一个变量隐藏了另一个变量。您可以通过显式使用类型强制转换来引用超类中的变量。 (我假设您已修复语法错误)

public class Main {
    static class A {
        public String[] invocations = {"foo"};
    }

    static class B extends A {
        public String[] invocations = {"bar", "baz"};
    }

    public static void main(String... args) {
        B b = new B();
        System.out.println("((A)b).invocations=" + Arrays.toString(((A) b).invocations));
        System.out.println("b.invocations=" + Arrays.toString(b.invocations));
    }
}


版画

((A)b).invocations=[foo]
b.invocations=[bar, baz]

10-04 10:17