我想重写一个方法并将它采用的参数替换为该参数的子类。
对于返回类型没有问题,因为它们不是方法签名的一部分,可以用子类替换(称为“协变返回类型”)。对于参数,这是行不通的,因为它们是签名的一部分。
所以我想出了使用相同类型的泛型参数的解决方案:
public abstract class A<T extends A> {
public void loadValuesFrom(T source) {
...
}
}
public class B extends A<B> {
public void loadValuesFrom(B source) {
super.loadValuesFrom(source);
...
}
}
但是“公共抽象类 A”这句话在我看来很奇怪。还有其他方法可以实现这一目标吗?任何“协变参数类型”?:-)