无法从扩展类中获取属性值

时间:2018-04-14 02:41:41

标签: java inheritance

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

1 个答案:

答案 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]