0

情况:

  • 我有一个带有几种方法的抽象类:
  • 我有几个子类扩展了上面的类
  • 我有一个集合<MyAbstractClass>集合,其中填充了主类中子类的新对象
  • 我有一个子类的唯一方法,我希望以覆盖我通常调用的方法的方式执行该方法。

即,如果条件为真,而不是通常的collection.get(i).method();wherei是索引,则执行collection.get(i).specificMethod();

谁能指出我正确的主题以进一步研究?此外,对我的情况有一点了解会产生奇迹。

4

2 回答 2

1

听起来你想要instanceof

for (AbstractThing thing : yourCollection) {
    if (thing instanceof SubclassWithSpecialMethod) {
        ((SubclassWithSpecialMethod)thing).specialMethod();
    }
    else {
        thing.method();
    }
}

虽然 有完全合法的用途instanceof,但如果你发现你正在使用它(特别是如果你经常使用它),它有时表明最好退后一步,看看大图看看是否有一些方法你可以重新组织事情,所以你不会那样做。

例如,在这种情况下,也许抽象类可能具有method,然后具有特殊行为的子类可能会覆盖 method特殊行为,因此调用者只需调用method并在处理时启动多态性以赋予它特殊行为特定的子类。

于 2013-04-03T08:38:57.883 回答
0

检查条件,method()如果满足,specificMethod()则从那里调用。根据您的描述,这仅适用于某些子类。

如果您正在检查外部条件,请将标志传递给method()以指示它是否应该调用specificMethod()同一实例。

于 2013-04-03T08:39:41.483 回答