我原以为我知道如何做这件事,但是我遇到了一些意想不到的行为,所以显然我漏掉了什么东西。以下是问题的核心。
基础类:
派生类:
基类编译通过,但是当我编译派生类时出错:
有人可以告诉我这里发生了什么吗?
基础类:
public abstract class Base<T>
{
abstract public void foo(List<? extends T> l);
}
派生类:
public class Derived<T> extends Base
{
@Override
public void foo(List<? extends T> l) { return; }
}
基类编译通过,但是当我编译派生类时出错:
参数Derived.java:3: Derived is not abstract and does not override abstract method foo(java.util.List) in Base
public class Derived extends Base
^
Derived.java:5: method does not override or implement a method from a supertype@Override ^
2 errors
List<? extends T>
的通用性似乎是问题的原因。如果我在两个签名中将该部分替换为基本类型 int
,它就会编译通过。有人可以告诉我这里发生了什么吗?