我正在使用向量来存储抽象超类的对象。我需要访问向量中每个对象的派生子类中的方法。我将使用instanceof
来区分每个对象所属的子类。
我没有权限写入抽象类。
目前我得到的编译错误是:
Error: cannot find symbol symbol: method <mySubclassMethod>() location: class <MyAbstractClass>
在向量中访问每个对象的子类方法最有效的方法是什么?
答案 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)
我认为你想要做的是在超类中将方法创建为抽象。然后,您要做的是在每个子类中重写此方法。这将允许您访问该向量中的所有不同对象的方法。
我假设这个方法会因你的子类而异,否则,为什么你不会首先在超类中编写该方法。