Java Class 无法覆盖抽象 class 中的方法,它具有包含接口的方法签名

Java Class cannot override method in abstract class which has a method signature that contains an interface

我有设置:

public abstract class AbstractDbManager {
    
    
    public abstract boolean createTable();
    
    public abstract int insert(Stockable rm);
    
    public abstract Stockable get(String key);
    
    public abstract int save(Stockable rm);
    
}

public interface Stockable {
    
}


public class Stock implements Stockable{
    
}


public class StockDbManager extends AbstractDbManager{

    @Override
    public boolean createTable() {
        return true;
    }

    @Override
    public int insert(Stock stk) {
     return 0;
    }

    @Override
    public Stock get(String key) {
        return null;
    }

    @Override
    public int save(Stock stk) {
        return 0;
    }
    
  
}

为什么 StockDbManager 中的 int insert(Stock stk)int save(Stock stk) 方法不会覆盖方法:

abstract int insert(Stockable rm);AbstractDbManager 中的 abstract int save(Stockable rm); 尽管每个 Stock 也是 Stockable ?

但是请注意,StockDbManager 中的 Stock get(String key) 方法成功覆盖了 AbstractDbManager 中的 abstract Stockable get(String key); 方法。

方法 insert(Stockable) 要求它接受 Stockable 所有 实现,而您的实现不满足合同的要求:它只接受Stockable(即Stock)的具体实现。

对于 return 值,它的工作方式不同:Stockable get(..) 表示它将 return 一个 Stockable,并且给定 Stock 是一个 Stockable , 在实现中将其缩小到 Stock get(..) 是可以接受的,因为它履行了合同。