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

时间:2015-04-02 21:27:25

标签: java inheritance

来自C#背景我不知道这里有什么问题。

我有我的基类,它定义了抽象方法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.
    }
}

我想这可以做泛型基类,但我不确定为什么。

1 个答案:

答案 0 :(得分:1)

您的MessagesDataSource课程为BaseDataSource<IIdentifiable>,而不是BaseDataSource<Message>getContentValuesMessagesDataSource的参数类型必须与类型参数IIdentifiable匹配。

@Override
protected ContentValues getContentValues(IIdentifiable object) {

或者,如果您必须将Message替换为参数类型,假设Message实现IIdentifiableobject,那么中间类IIdentifiableDataSource可以定义自己的类型参数MessagesDataSource可以提供。

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

然后MessagesDataSource可以将T定义为Message

public class MessagesDataSource extends IIdentifiableDataSource<Message> {