是否可以使用扩展超类方法参数的参数覆盖超类方法?
Is it possible to override a superclass' method with a parameter extending the superclass' method parameter?
假设我有一个 class 像这样:
abstract class Something {}
它有一个层次结构 classes 扩展它:
class FirstSomething extends Something {}
class SecondSomething extends Something {}
然后在其他地方我有一个 class 利用这些东西:
abstract class A {
public void setSomething(Something something) {
//Process the something
}
}
我能否指定 A 的子class,以便它使用更具体的 "something" class 覆盖 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 class:
中做类似的事情
public void setSomething(Something something) {
checkClass(something);
//Use the something
}
protected abstract void checkClass(Something something);
其中 B class 和 C class 如果 SuperSomething 的类型不适合那些 classes.
编辑:
我已经尝试使用上面的确切方法签名,但是 subclass 方法不会覆盖 super 的方法,我想我真的在问:
有没有办法在 super class' 定义中指定一个方法,其中有一个编译时检查 setSomething 方法中允许的对象类型,用于 super[= 的 subclasses 30=]?
您可以通过指定类型可以是 Something
或其子class之一来使 A class 成为泛型(我已经将 setSomething
方法抽象,但如果需要,您可以提供实现)。
abstract class A <T extends Something> {
public abstract void setSomething(T something);
}
然后强制类型 T 成为您在子classes 中想要的特定class。
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
}
}
假设我有一个 class 像这样:
abstract class Something {}
它有一个层次结构 classes 扩展它:
class FirstSomething extends Something {}
class SecondSomething extends Something {}
然后在其他地方我有一个 class 利用这些东西:
abstract class A {
public void setSomething(Something something) {
//Process the something
}
}
我能否指定 A 的子class,以便它使用更具体的 "something" class 覆盖 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 class:
中做类似的事情public void setSomething(Something something) {
checkClass(something);
//Use the something
}
protected abstract void checkClass(Something something);
其中 B class 和 C class 如果 SuperSomething 的类型不适合那些 classes.
编辑: 我已经尝试使用上面的确切方法签名,但是 subclass 方法不会覆盖 super 的方法,我想我真的在问: 有没有办法在 super class' 定义中指定一个方法,其中有一个编译时检查 setSomething 方法中允许的对象类型,用于 super[= 的 subclasses 30=]?
您可以通过指定类型可以是 Something
或其子class之一来使 A class 成为泛型(我已经将 setSomething
方法抽象,但如果需要,您可以提供实现)。
abstract class A <T extends Something> {
public abstract void setSomething(T something);
}
然后强制类型 T 成为您在子classes 中想要的特定class。
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
}
}