假设您有一个带有子类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)。