我有两个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"}
?
答案 0 :(得分:1)
你有一个隐藏另一个变量的变量。您可以通过显式使用类型转换来引用超类中的变量。 (我假设您修复了语法错误)
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]