作者:化妆师苹苹 | 来源:互联网 | 2022-12-10 13:48
当覆盖方法然后面临一个问题:
public interface IProduct {
public void sendMessage(Object object);
}
@Service
public class ProductManagere implements IProduct{
@Override
public void sendMessage(Product product) {
// Added logic
}
}
但要低于例外:
ProductManagere类型的sendMessage(Product)方法必须覆盖或实现超类型方法
我不明白为什么抛出这个例外.我希望product是Object的子类型,所以它不会抛出异常.
1> davidxxx..:
在Java中,覆盖不允许参数的协方差.
它只能用于返回类型.
为什么?因为更改子类中方法的参数类型不是为了覆盖方法而是为了重载它.这不是你的意图.
所以要么你必须Object
在子类中保留参数(可能不是你想要的),要么使接口成为通用接口,例如:
public interface IProduct {
void sendMessage(T object);
}
而子类:
@Service
public class ProductManagere implements IProduct{
@Override
public void sendMessage(Product product) {
// Added logic
}
}
但值得说明*为什么*它不接受协变参数类型.