我有两个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]