【问题标题】:Java method: retrieve the inheriting typeJava方法:检索继承类型
【发布时间】:2010-05-11 07:25:40
【问题描述】:
【问题讨论】:
标签:
java
class
inheritance
【解决方案1】:
干净的方法是不是在任何时候显式地“检索类型”。
相反,您将goForIt() 设为C 类的方法,并让A 和B 覆盖它并以不同方式实现它,可能在此过程中调用super.goForIt()。
【解决方案2】:
是的,instanceof 不是很干净。听起来goForIt() 应该根据子类的某些属性来改变行为。不要将问题硬编码为“它是 A 吗?”,而是提出“该类是否具有某些关键属性 Foo?”的问题。 (大概 A 有)。然后,让班级回答问题。
public class C {
public abstract boolean isFoo();
public void goForIt(C c) {
if (isFoo()) {
...
}
...
}
public class A extends C {
public boolean isFoo() {
return true;
}
...
}
public class B extends C {
public boolean isFoo() {
return false;
}
...
}