Java 方法覆盖 - "Method does not override method from super..."
Java Method Override - "Method does not override method from super..."
来自 C# 背景,我不知道这里的问题是什么。
我有我的基础 class,它定义了抽象方法 getContentValues
public abstract class BaseDataSource<T> {
protected abstract ContentValues getContentValues(T object);
}
从那继承另一个 class,IIdentifiableDataSource。
public abstract class IIdentifiableDataSource extends BaseDataSource<IIdentifiable> {
// Nothing in here is relevant to the getContentValues method.
}
最后,继承自 IIdentifiableDataSource 的是最后一个子 class MessagesDataSource,其中 getContentValues 被覆盖。它在这里抛出一个错误,指出 "Method does not override method from its superclass"
public class MessagesDataSource extends IIdentifiableDataSource {
@Override
protected ContentValues getContentValues(Message object) {
// fill ContentValues and return it.
}
}
我想这与通用基础 class 有关,但我不确定为什么。
您的 MessagesDataSource
class 是 BaseDataSource<IIdentifiable>
,而不是 BaseDataSource<Message>
。 MessagesDataSource
中 getContentValues
的参数类型必须匹配类型参数 IIdentifiable
.
@Override
protected ContentValues getContentValues(IIdentifiable object) {
或者,如果必须用Message
代替参数类型,假设Message
实现了IIdentifiableobject
,那么中间的classIIdentifiableDataSource
就可以定义 MessagesDataSource
可以提供的自己的类型参数。
public abstract class IIdentifiableDataSource<T extends IIdentifiable>
extends BaseDataSource<T> {
那么MessagesDataSource
可以定义T
为Message
:
public class MessagesDataSource extends IIdentifiableDataSource<Message> {
来自 C# 背景,我不知道这里的问题是什么。
我有我的基础 class,它定义了抽象方法 getContentValues
public abstract class BaseDataSource<T> {
protected abstract ContentValues getContentValues(T object);
}
从那继承另一个 class,IIdentifiableDataSource。
public abstract class IIdentifiableDataSource extends BaseDataSource<IIdentifiable> {
// Nothing in here is relevant to the getContentValues method.
}
最后,继承自 IIdentifiableDataSource 的是最后一个子 class MessagesDataSource,其中 getContentValues 被覆盖。它在这里抛出一个错误,指出 "Method does not override method from its superclass"
public class MessagesDataSource extends IIdentifiableDataSource {
@Override
protected ContentValues getContentValues(Message object) {
// fill ContentValues and return it.
}
}
我想这与通用基础 class 有关,但我不确定为什么。
您的 MessagesDataSource
class 是 BaseDataSource<IIdentifiable>
,而不是 BaseDataSource<Message>
。 MessagesDataSource
中 getContentValues
的参数类型必须匹配类型参数 IIdentifiable
.
@Override
protected ContentValues getContentValues(IIdentifiable object) {
或者,如果必须用Message
代替参数类型,假设Message
实现了IIdentifiableobject
,那么中间的classIIdentifiableDataSource
就可以定义 MessagesDataSource
可以提供的自己的类型参数。
public abstract class IIdentifiableDataSource<T extends IIdentifiable>
extends BaseDataSource<T> {
那么MessagesDataSource
可以定义T
为Message
:
public class MessagesDataSource extends IIdentifiableDataSource<Message> {