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

时间:2013-06-20 00:50:30

标签: 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 another
    }
}

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

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

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

1 个答案:

答案 0 :(得分:3)

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