Java方法:检索继承类型

时间:2010-05-11 07:25:40

标签: java class inheritance

我有几个扩展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 *

2 个答案:

答案 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的方法,并AB覆盖它并以不同方式实现它,可能会调用super.goForIt()过程