2013-11-20 72 views
0

的Java接口的方法我有了像通過超類型

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的,日食與用getFilter沒有問題,我很困惑,爲什麼它與saveFilter的問題。該錯誤是

的方法saveFilter類型MappedJobFilterManager的(JobFilter)必須 覆蓋或實現超類方法

難道不應該接受任何類型FilterAbs的,因爲它的參數?

回答

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

雖然不完全清楚什麼是你想要的目的。

+0

謝謝,我想我不確定爲什麼使用超類型的返回類型工作正常,但不適用於方法參數。 – PDStat

0

因爲該方法是不同的,它有不同的觀點,因此不同的簽名

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

覆蓋您需要確切的方法簽名。

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

如果是這種情況,爲什麼'@Override public JobFilter getFilter(String filterName)'工作正常? – PDStat