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

Accessing subclass methods within a vector of of superclass objects

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

我没有写摘要的权限class。

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

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

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

您需要将对象转换为 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

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

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