0

我有一个名为的抽象超类C和它的多个子类:SubC1, SubC2, ...现在我有一个超类的集合,C我想迭代它,但根据它是哪个子类做一些不同的事情。这是伪代码:

abstract class C{}
class SubC1 extends C{}
class SubC2 extends C{}

...

for(C c : cs){
    if(c is a SubC1){
    //do one thing
    }
    if(c is a SubC2){ 
    //do another
    }
}

但是我不确定如何设置 if 条件。我的第一个想法是使用instanceof,但后来我意识到它不适用于沮丧。然后我考虑添加一个String字段C并让每个子类定义它并以此为基础设置我的条件,但这似乎很笨拙。我还考虑过通过强制沮丧和捕捉 来尝试使用消除过程ClassCastExceptions,但这也很笨重,而且看起来有点危险。那么如何在没有愚蠢代码的情况下获得我想要的东西呢?

编辑:我忘了补充一点,我doSomething()在 C 中添加一个函数并覆盖它是没有意义的。

编辑2:出于某种原因,我认为这样做会c instanceof SubC1导致编译器错误。现在我意识到它没有我的答案。

4

1 回答 1

3

doSomething在所有子类中有一个抽象方法C并覆盖它,然后调用C#doSomething

于 2013-06-20T00:52:11.947 回答