我有一个超类和子类,并且我希望能够根据是否为超类实例调用方法来调用特定的方法实现,子类实例。我计划在if
条件下使用instanceof
操作符在Java中检查该条件。我想知道是否有任何其他方式(泛型,可能是?)来实现这一点比拥有这种if
条件更好 - 反正这看起来并不整齐。此外,通过这种方法,我不得不做一个不安全的类型转换。当我不得不将obj
从SuperClass
类型转换为类型时。请建议。在超类和子类中实现具有相同名称但不同实现的方法
void doSomething (SuperClass obj) {
// Works the same way for super and sub class
int p = obj.getX1(obj);
int q = obj.getX2(obj);
int implementationSpecificVariable;
// choose behavior based on the actual class
if (obj instanceof SuperClass) {
implementationSpecificVariable = doForSuper(obj);
} else if (obj instanceof SubClass) {
implementationSpecificVariable = doForSub((SubClass) obj);
}
}
如果你必须这样做,这表明你的设计可能有缺陷开始。你可以在'SuperClass'中没有方法并在'SubClass'中覆盖它吗? –
为什么不简单在类SuperClass中实现该方法并在SubClass中重写它? – isnot2bad