我有一个父类(super class)和子类,并且我希望能够根据是否为父类(super class)实例或子类实例调用该方法来调用该方法的特定实现。我计划有一个 if
条件来使用 Java 中的 instanceof
运算符来检查这一点。我想知道是否有其他方法(可能是泛型?)来比使用这个 if 条件更好地实现这一点 - 无论如何,这看起来并不简洁。另外,使用这种方法,当我必须将 obj
从 SuperClass
类型转换为 SubClass
类型时,我必须进行不安全的类型转换。请提出建议。
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);
}
}
最佳答案
为此使用 OOP!
class SuperClass {
public void doSomething() { /* implementation for SuperClass */ }
}
class SubClass extends SuperClass {
@Override
public void doSomething() { /* implementation for SubClass */ }
}
现在,每当您引用 SuperClass
或 SubClass
的实例时,对其调用 doSomething
将调用第一个或第二次实现:
SuperClass obj = ...; // create instance of SuperClass or SubClass
obj.doSomething();
关于java - 在父类(super class)和子类中实现同名但不同实现的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21100051/