2012-01-30 80 views
1

的方法在Java中,我有父母class P和孩子class C.类型检查的子类

抽象类,我有一个方法void blah(P parent)。在抽象类的子类中,它不通过void blah(C child)进行编译。

如何在子类中实现类型检查?

+0

+1。我认为这在泛型中可能部分可行,但可能不是一个真正令人满意的方式。毕竟,它有点违背了利斯科夫的替代原则。等待已经尝试过的人的好回答。 – Thilo 2012-01-30 03:47:39

回答

4

void blah(P parent)void blah(C child)实际上是不同的方法。这就是为什么你不能使用C子类来重写一个抽象的P父类方法。

所以,在你的子类的抽象类,您可以

void blah(P parent){ 
    if(parent instanceof C){ 
    ... 
    }else if(parent instanceof C2){ 

    } 
} 

或者只是分别实现这两个方法。

1

我建议你使用父类型参数而不是子参数。如果你使用它,你可以通过任何实现或抽象类,它会让你的代码可重用。

在你的情况下,你有两种不同的方法,这是不是重写的方法。