首页 > 解决方案 > Java 类不能覆盖具有包含接口的方法签名的抽象类中的方法

问题描述

我有设置:

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;
    }
    
  
}

为什么不使用方法:int insert(Stock stk)int save(Stock stk) 覆盖StockDbManager方法:

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

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

标签: javaoopinheritanceinterfaceabstract-class

解决方案


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

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


推荐阅读