在集合中访问特定于类的“类型”的方法

时间:2013-04-03 08:36:09

标签: java inheritance collections methods abstract

情况:

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

即。如果条件为真,则执行collection.get(i).method();

而不是通常的i,其中collection.get(i).specificMethod();是索引

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

2 个答案:

答案 0 :(得分:1)

听起来你想要instanceof

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

虽然instanceof有完全合法的用法,但如果您发现它正在使用它(特别是如果您经常使用它),它有时会表明退后一步会很好并查看较大的图片,看看是否有某种方法可以重组事情,这样你就不会这样做了。

在这种情况下,例如,抽象类可能有method,然后具有特殊行为的子类可以覆盖 method具有特殊行为,所以调用者只需调用method,并且当您处理该特定子类时,多态性就会启动它以使其具有特殊行为。

答案 1 :(得分:0)

检查method()中的条件,如果符合,请从那里拨打specificMethod()。根据您的描述,这仅适用于某些子类。

如果您要检查外部条件,请将标记传递给method()以指示是否应该呼叫同一实例的specificMethod()