Den*_*hev 3 java oop generics inheritance overriding
想象一下,我们有以下课程:
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
}
}
Run Code Online (Sandbox Code Playgroud)
getList在ChildClass不编译时,输出为:
abstract method getList(T) in com.mypackage.MyInterface cannot be accessed directly
Run Code Online (Sandbox Code Playgroud)
我无法BaseClass.getList理解为什么在ChildClass中没有覆盖方法.
但令我完全困惑的是使其编译的修复:
class ChildClass extends BaseClass<Integer> {
@Override
public List<Integer> getList(Integer t) {
return super.getList((Number) t); //Now it compiles!
}
}
Run Code Online (Sandbox Code Playgroud)
所以我将Integer转换为Number,并解决了这个问题.
谁能解释一下这段代码中发生了什么?
您的基类应如下所示:
abstract class BaseClass<T extends Number> implements MyInterface<T> {
@Override
public List<T> getList(T t) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
您没有使用T,而是使用Number类作为参数.