我有几个扩展C的类,我需要一个接受C类任何参数的方法。但是在这个方法中,我想知道我是在处理A还是B.
*
public A extends C
public B extends C
public void goForIt(C c)()
如果我演员怎样才能以干净的方式检索类型(我只是使用getClass或instanceof is often not the best way阅读。)
**抱歉,I can't type closing braces *
答案 0 :(得分:1)
是的,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;
}
...
}
答案 1 :(得分:1)
干净的方式是不以在任何时候明确地“检索类型”。
相反,您将goForIt()
设为类C
的方法,并A
和B
覆盖它并以不同方式实现它,可能会调用super.goForIt()
过程