? extends T ----- 类型上界
那么这个时候G<? extends A>就可以作为G< A>和G< B>的父类,其中A是B的父类
? super T — 类型下界
那么这时候G<? super A> 就可以作为G< A>和G < C>的父类,其中A是C的子类
package 泛型.通配符; import java.util.ArrayList; import java.util.List; public class Demo { public static void main(String[] args) { List<? extends Number> list1 = null; List<? super Number> list2 = null; List<Integer> list3 = new ArrayList<>(); List<Number> list4 = new ArrayList<>(); List<Object> list5 = new ArrayList<>(); list1 = list3; list1 = list4; /* 这个时候这里就会编译出错,因为这个时候我们的list5指向的是一个ArrayList<Object> 类型的对象,这个时候我们的? extends Number 只能匹配Number类型的对象和Number子类类型的对象 */ // list1 = list5; /* 这时候编译会出错,因为这个时候我们的list3指向的是一个ArrayList<Integer> 类型的对象,这个时候我们的 ? super Number 只能匹配Number类型的对象和Number类型的父类类型的对象 */ // list2 = list3; list2 = list4; list2 = list5; } }