Java方法覆盖 - “方法不会覆盖超级方法...”

问题描述:

来自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

您的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