在超类对象的向量内访问子类方法

时间:2015-03-20 17:51:58

标签: java object inheritance vector abstract-class

我正在使用向量来存储抽象超类的对象。我需要访问向量中每个对象的派生子类中的方法。我将使用instanceof来区分每个对象所属的子类。

我没有权限写入抽象类。

目前我得到的编译错误是:

  

Error: cannot find symbol symbol: method <mySubclassMethod>() location: class <MyAbstractClass>

在向量中访问每个对象的子类方法最有效的方法是什么?

2 个答案:

答案 0 :(得分:1)

您需要将对象强制转换为instanceof守卫内的子类。

if (obj instanceof MySubclass)
    ((MySubclass)obj).mySubclassMethod();

更广泛地说,如果该方法应该在所有子类中都可用,则应将其添加到抽象超类中。然后,当您在'uncasted'抽象超类对象上调用该方法时,它将使用来自适当子类的实现。

public abstract class MySuperclass {
    public abstract void mySubclassMethod();
    ...
}

public class MySubclass extends MySuperclass {
    @Override
    public void mySublcassMethod() { ... }
    ...
}
...

MySuperclass obj = [actually a Subclass];
obj.mySubclassMethod(); // uses the implementation from MySubclass

答案 1 :(得分:0)

我认为你想要做的是在超类中将方法创建为抽象。然后,您要做的是在每个子类中重写此方法。这将允许您访问该向量中的所有不同对象的方法。

我假设这个方法会因你的子类而异,否则,为什么你不会首先在超类中编写该方法。