假设我有一个这样的类:
abstract class Something {}
它有一个层次结构,其中包含扩展它的类:
class FirstSomething extends Something {}
class SecondSomething extends Something {}
然后在其他地方,我有一个利用这些东西的课程:
abstract class A {
public void setSomething(Something something) {
//Process the something
}
}
我是否可以指定a的一个子类,以便它用更具体的"something"类覆盖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方法中抛出异常。
编辑:我已经尝试了上面的确切方法签名,但子类方法并没有覆盖super的方法,我想我真的在问:有没有一种方法可以在超类的定义中指定一个方法,其中对超类的子类的setSomething方法中允许的对象类型进行编译时检查?
您可以通过指定类型可以是Something
或其子类之一来使A类成为泛型(我已经使setSomething
方法成为抽象方法,但如果需要,您可以提供实现)。
abstract class A <T extends Something> {
public abstract void setSomething(T something);
}
然后强制类型T成为子类中所需的特定类。
class B extends A<FirstSomething> {
@Override
public void setSomething(FirstSomething something) {
//Set the something
}
}
class C extends A<SecondSomething> {
@Override
public void setSomething(SecondSomething something) {
//Set the something
}
}