访问扩展另一个类的类之外的变量

law*_*wls 1 java

如何访问扩展数组列表中使用的其他类的类外部的变量?我收到一个错误,指出变量在扩展类中不存在.看一下,我想访问变量成员而不必在我的Object类中声明它:

public abstract class Object {
    public int x, y;
}

public class House extends Object {
    public int members = 10;
}

// Somewhere else
ArrayList<Object> list = new ArrayList<Object>();
list.add( new House() );
for (Object o : list ) {
    o.members;
}
Run Code Online (Sandbox Code Playgroud)

问题是在我写的RTS中,我的Object类有40多个变量,只是因为它不能仅在子类中声明它们并从外部访问它们.希望你能理解.我怎样才能做到这一点?

Aas*_*set 8

你可以使用instanceof和演员:

for (Object o : list ) {
    if (o instanceof House) {
        h = (House) o;
        h.members;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这通常被认为是糟糕的设计; 你应该考虑在界定适当的方法Object(这应该真的有另一个名字,正如其他人所指出的),并在覆盖它House.然后,您可以在Object不知道它所引用的对象类型的情况下调用该方法,如果它是a House,则将调用正确的方法.(学习如何正确地做到这一点,何时做,需要一些练习 - 谷歌多态覆盖.)