Java 确定适当向下倾斜的最佳方法

Java 确定适当向下倾斜的最佳方法,java,inheritance,downcast,Java,Inheritance,Downcast,我有一个名为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 ano

我有一个名为
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
,但后来我意识到它对downcast不起作用。然后,我考虑在
C
中添加一个
String
字段,让每个子类定义它,并以此为基础设置条件,但这似乎很笨拙。我还考虑过尝试使用消除过程,通过强制向下转换并捕获
ClassCastExceptions
,但这也很笨拙,似乎有点危险。那么,我怎样才能在没有愚蠢代码的情况下得到我想要的呢

编辑:我忘了补充一点,在C中添加
doSomething()
函数并重写它对我来说没有意义


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

C
中有一个抽象方法
doSomething
并在所有子类中重写它,然后调用
C#doSomething
C
中有一个抽象方法
doSomething
并在所有子类中重写它,然后调用
C#doSomething
这就是多态性的作用。在基类中定义一个抽象方法,然后在每个子类的重写中放置特定的行为。看看这个:@OliCharlesworth我编辑了我的问题以回应你的评论。这就是多态性的用途。在基类中定义一个抽象方法,然后在每个子类的重写中放置特定的行为。看看这个:@OliCharlesworth我编辑了我的问题以回应你的评论。我忘了添加,我真的不能这样做。这没有多大意义。在这种情况下,如果(SubC1的c实例){SubC1 SubC1=(SubC1)c;}
哦。。。出于某种原因,我认为这导致了一个编译器错误。不,如果
c
不是
SubC1
,它可能会导致运行时错误,但这就是
如果(SubC1的c实例)
guard是为我忘记添加的,我真的不能这样做。这没有多大意义。在这种情况下,如果(SubC1的c实例){SubC1 SubC1=(SubC1)c;}哦。。。出于某种原因,我认为这导致了一个编译器错误。不,如果
c
不是
SubC1
,它可能会导致运行时错误,但这就是
if(SubC1的c实例)
保护的作用