假设您有一个带有子类SC1,SC2,...的基类BC和一个对象集合C(某些类型为SC1,某些类型为SC2,...)。方法m是在子类中定义的,而不是在BC中定义的。我希望做这样的事情:

class AnotherClass {
  private BC getObj(Container c) { /*return something from c*/ }

  private void anotherMethod() {
    ...
    BC o = getObj(c);
    o.m();
  }
}


现在,getObj将返回对对象的引用o,据我所知它必须为BC类型(或者是否可以在此处应用泛型?)。我得到一个编译错误,原为(m()在BC中不存在)。我假设有一个很好的方法可以做到这一点(而不必“手动”弄清o的真实类型)?

最佳答案

为什么没有在BC中定义方法?这就是多态性的全部内容。

您的另一个选择是使对象实现包含m的接口,并具有该接口的集合,而不是BC。或使用反射(ew),或检查类型(ew)。

10-02 02:49
查看更多