传递超类型的Java接口方法

时间:2013-11-20 15:07:15

标签: java interface override

我的界面有

之类的方法
public interface IFilterManager {
    public FilterAbs getFilter(String filterName);
    public void saveFilter(FilterAbs filter);
}

然后我有一个实现这些的类。

public class FilterManager implements IFilterManager {
    @Override
    public JobFilter getFilter(String filterName) {
    //Do stuff
    }

    @Override
    public void saveFilter(JobFilter jobFilter)
    //Do stuff
    }
}

JobFilter是FilterAbs的具体类,eclipse对getFilter没有任何问题我很困惑为什么它与saveFilter有问题。错误是

  

MappedJobFilterManager类型的方法saveFilter(JobFilter)必须   覆盖或实现超类型方法

它不应该接受任何类型的FilterAbs作为它的参数吗?

3 个答案:

答案 0 :(得分:3)

问题是签名不同。

所以你的界面中有public void saveFilter(FilterAbs filter);

public void saveFilter(JobFilter jobFilter)代码。

请注意public在您的界面中也是多余的。默认情况下隐含public

您可以使用通用界面来缓解此问题:

public interface SomeInterface<T extends FilterAbs> {
    public T getFilter(String filterName);
    public void saveFilter(T filter);
}

虽然你想要实现的目标尚不清楚。

答案 1 :(得分:0)

因为方法不同,它有不同的参数,因此签名不同

public void saveFilter(FilterAbs filter);
public void saveFilter(JobFilter jobFilter)

答案 2 :(得分:0)

要覆盖,您需要精确的方法签名。

@Override
public void saveFilter(FilterAbs jobFilter)
//Do stuff
}