我有一个名为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
来尝试消除过程,但这也是笨重的,似乎有点危险。那么如何在没有愚蠢代码的情况下得到我想要的东西呢?
编辑:我忘了补充一点,在C中添加doSomething()
函数并覆盖它是没有意义的。
编辑2:出于某种原因,我认为做c instanceof SubC1
会导致编译错误。现在我意识到它没有我的答案。
答案 0 :(得分:3)
在doSomething
中使用抽象方法C
并在所有子类中覆盖它,然后调用C#doSomething