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



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

我没有权限给抽象类写信。

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

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

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

您需要将对象强制转换为instanceof保护内部的子类。

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

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

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

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

我假设这个方法会根据您的子类而有所不同,否则,为什么不首先在超类中编写该方法呢。

最新更新