【发布时间】:2011-04-25 22:23:34
【问题描述】:
假设我们有以下类:
public interface MyInterface<T> {
List<T> getList(T t);
}
abstract class BaseClass<T extends Number> implements MyInterface<T> {
@Override
public List<T> getList(Number t) {
return null;
}
}
class ChildClass extends BaseClass<Integer> {
@Override
public List<Integer> getList(Integer t) {
return super.getList(t); //this doesn't compile
}
}
ChildClass 中的getList 无法编译,输出为:
abstract method getList(T) in com.mypackage.MyInterface cannot be accessed directly
我不明白为什么 BaseClass.getList 方法没有在 ChildClass 中被覆盖。
但让我完全困惑的是使它编译的修复:
class ChildClass extends BaseClass<Integer> {
@Override
public List<Integer> getList(Integer t) {
return super.getList((Number) t); //Now it compiles!
}
}
所以我将整数转换为数字,并且解决了这个问题。
谁能解释这段代码发生了什么?
【问题讨论】:
标签: java oop generics inheritance overriding