2015-04-02 317 views
2

來自C#背景我不知道這是什麼問題。Java方法覆蓋 - 「方法不會覆蓋超級方法...」

我有我的基類,它定義了抽象方法,getContentValues

public abstract class BaseDataSource<T> { 
    protected abstract ContentValues getContentValues(T object); 
} 

從繼承是另一個類,IIdentifiableDataSource。

public abstract class IIdentifiableDataSource extends BaseDataSource<IIdentifiable> { 
    // Nothing in here is relevant to the getContentValues method. 
} 

最後,從IIdentifiableDataSource繼承,是最後一個子類MessagesDataSource,其中getContentValues被覆蓋。它扔在這裏的錯誤,指出

public class MessagesDataSource extends IIdentifiableDataSource { 
    @Override 
    protected ContentValues getContentValues(Message object) { 
     // fill ContentValues and return it. 
    } 
} 

「法不從它的超重寫方法」我想這事做通用基礎類,但我不能確定這是爲什麼。

+0

看看方法的簽名...參數類型不匹配。那就是問題所在。你超載不重寫(在你的情況下將實施)。 – Alboz 2015-04-02 21:31:09

回答

1

您的MessagesDataSource類是BaseDataSource<IIdentifiable>,而不是BaseDataSource<Message>。參數getContentValues的參數類型MessagesDataSource必須與類型參數IIdentifiable匹配。

@Override 
protected ContentValues getContentValues(IIdentifiable object) { 

或者,如果你必須有Message,而不是作爲參數類型,假設Message工具IIdentifiableobject,則中間類IIdentifiableDataSource可以定義自己的類型參數MessagesDataSource可以提供。

public abstract class IIdentifiableDataSource<T extends IIdentifiable> 
    extends BaseDataSource<T> { 

然後MessagesDataSource可以定義TMessage

public class MessagesDataSource extends IIdentifiableDataSource<Message> { 
+0

謝謝!現在有道理!無論如何,我可能不應該在這個小小的睡眠上工作,哈哈。 – jnich91 2015-04-02 21:41:20