- 我有几种方法的抽象类:
- 我有延长上述 类的几个子类
- 我有一个集合
<MyAbstractClass>
集合充满了我的主类中的子类的新对象 - 我有一个独特的方法之一,我希望执行一个覆盖我通常调用的方法的子类。
即如果条件为,而不是通常collection.get(i).method();
其中i
是索引真,执行collection.get(i).specificMethod();
任何人都可以点我到正确的主题,进一步研究?另外,对我的情况有一点洞察力会产生奇迹。
<MyAbstractClass>
集合充满了我的主类中的子类的新对象即如果条件为,而不是通常collection.get(i).method();
其中i
是索引真,执行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()
。
重新考虑你的方法。在抽象类中创建一个方法,例如'specificActions()'并在每个子类中实现它。 – Keppil