首先看到这两个<? extends T> 、 <? super T>上下界通配符,不要理所应当的代入成 ? 继承了 extends T 这种想法,这是错的。
用集合来解释
<? extends T>
表示的是 ?类型范围限制在T类型以及其子类
也即?∈(-∞,T)
举例子
List<? extends T> extendList= new ArrayList<?>();
这后面的?只能是T或者T的子类,也即延迟到运行阶段才确定这个list的泛型
同理
<? super T>
表示的是 ?类型范围限制在T类型以及其父类