我有一个抽象超类叫C
和它的多个子类:SubC1, SubC2, ...
现在我有一个超类C
的集合,我想遍历它,但做一些不同的取决于它是哪个子类。这里是伪代码:确定正确downcast的最佳方法
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
,但后来我意识到它不适用于downcasts。然后我考虑添加一个String
字段到C
,并让每个子类定义它并基于我的条件,但看起来很笨重。我还考虑过试图通过强制沮丧和赶上ClassCastExceptions
来消除过程,但这也很笨重,似乎有点危险。那么,如何在没有愚蠢的代码的情况下得到我想要的?
编辑:我忘了补充说,在C中添加一个doSomething()
函数并忽略它是没有意义的。
编辑2:出于某种原因,我认为做c instanceof SubC1
导致编译器错误。现在我意识到它没有我的答案。
这就是多态性是。在基类中定义一个抽象方法,然后将特定行为置于每个子类的覆盖中。 –
看看这个:http://www.artima.com/interfacedesign/PreferPoly.html – Rob013
@OliCharlesworth我编辑了我的问题以回应您的评论。 –