在超类对象的向量中访问子类方法
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
我认为您想做的是在超类中创建抽象方法。然后,您要做的是在每个子类中覆盖此方法。这将允许您为您的向量中的所有不同对象访问该方法。
我假设此方法会因您的子类而异,否则,您为什么不首先在超类中编写该方法。
我正在使用向量来存储抽象超对象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
我认为您想做的是在超类中创建抽象方法。然后,您要做的是在每个子类中覆盖此方法。这将允许您为您的向量中的所有不同对象访问该方法。
我假设此方法会因您的子类而异,否则,您为什么不首先在超类中编写该方法。