題目源自 牛客
classA{}
class B extends A{}
class C extends A{}
class D extedns B{}
which is true --答案 ACD
A:The type LIst<A> is assignable to List √ //List 相當於 List<?>范圍比List<A>大
B:The type List<B> is assignable to List<A> × //兩個點之間不能賦值,除非是相同的兩個點
C: The type List<Object> is assignable to List<?> √//List<?>是最大范圍, 而List<Object>只是其中的一個點,在最大范圍內
D: The type List<D> is assignable to List<?extendsB> √//D是B的子類,所以D的范圍比B小
如果尖括號里是一個類,例如 List<A>, List<B>, List<C>,List<Object>就是普通的泛型
如果尖括號里是<?extends >,例如 List<? extends A>代表小於等於A的范圍(extends 繼承,extends A 繼承自A,就是范圍小於等於A)
如果尖括號里是<? super>,例如List<? Super A> 代表范圍大於等於A的
如果尖括號里是<?> 則代表全部范圍
List<?> 和 List 范圍相同
尖括號里,所有點賦值都是錯的,除非兩個點相同eg: List<A> = List<B>,將B賦值給A是錯的, 但是 List<? extends A> = List<B> 是對的
尖括號里,小范圍賦值給大范圍 ,對
尖括號里,大范圍賦值給小范圍,錯
尖括號里,相同的點可以互相賦值