【发布时间】:2016-03-21 17:40:51
【问题描述】:
假设我有这样的课程:
abstract class Something {}
它有一个层次结构,类扩展它:
class FirstSomething extends Something {}
class SecondSomething extends Something {}
然后在其他地方我有一个使用这些东西的课程:
abstract class A {
public void setSomething(Something something) {
//Process the something
}
}
我是否能够指定 A 的子类,以便它使用更具体的“某物”类覆盖 setSomething 方法? 这就是我希望能够做到的:
class B extends A {
@Override
public void setSomething(FirstSomething something) {
//Process the something
}
class C extends A {
@Override
public void setSomething(SecondSomething something) {
//Set the something
}
目前我在 A 类做这样的事情:
public void setSomething(Something something) {
checkClass(something);
//Use the something
}
protected abstract void checkClass(Something something);
如果 SuperSomething 的类型不适合这些类,则 B 类和 C 类在 checkClass 方法中抛出异常。
编辑: 我已经尝试过使用上面的确切方法签名,但是子类方法不会覆盖超级方法,我想我真的在问: 有没有办法在超类的定义中指定一个方法,其中对超类的子类的 setSomething 方法中允许的对象类型进行编译时检查?
【问题讨论】:
-
你试过编译看看是否允许吗?
-
我试过了,并没有覆盖super的方法,我改一下问题
-
什么是
SuperSomething? -
搞错了,马上改!
-
覆盖很好。方法实现还有其他问题。它在
B和C类中在哪里抛出异常?还有checkClass方法的实现在哪里?
标签: java inheritance polymorphism abstract