情况:
- 我有一个带有几种方法的抽象类:
- 我有几个子类扩展了上面的类
- 我有一个集合
<MyAbstractClass>
集合,其中填充了主类中子类的新对象 - 我有一个子类的唯一方法,我希望以覆盖我通常调用的方法的方式执行该方法。
即,如果条件为真,而不是通常的collection.get(i).method();
wherei
是索引,则执行collection.get(i).specificMethod();
谁能指出我正确的主题以进一步研究?此外,对我的情况有一点了解会产生奇迹。
情况:
<MyAbstractClass>
集合,其中填充了主类中子类的新对象即,如果条件为真,而不是通常的collection.get(i).method();
wherei
是索引,则执行collection.get(i).specificMethod();
谁能指出我正确的主题以进一步研究?此外,对我的情况有一点了解会产生奇迹。
听起来你想要instanceof
:
for (AbstractThing thing : yourCollection) {
if (thing instanceof SubclassWithSpecialMethod) {
((SubclassWithSpecialMethod)thing).specialMethod();
}
else {
thing.method();
}
}
虽然 有完全合法的用途instanceof
,但如果你发现你正在使用它(特别是如果你经常使用它),它有时表明最好退后一步,看看大图看看是否有一些方法你可以重新组织事情,所以你不会那样做。
例如,在这种情况下,也许抽象类可能具有method
,然后具有特殊行为的子类可能会覆盖 method
特殊行为,因此调用者只需调用method
并在处理时启动多态性以赋予它特殊行为特定的子类。
检查条件,method()
如果满足,specificMethod()
则从那里调用。根据您的描述,这仅适用于某些子类。
如果您正在检查外部条件,请将标志传递给method()
以指示它是否应该调用specificMethod()
同一实例。