Это станет более понятным, если вы напишите код, который вызывает эти методы.
Например:
public static void main (String args) {
Test obj = new Test();
List<Double> list1 = obj.test1 ();
List<? extends Number> list2 = obj.test2 ();
}
Как видите, вывод test1()
можно назначить дляList<Double>
, что означает, что он не может вернуть List<Integer>
.
С другой стороны, выход test2()
может быть назначен только для List<? extends Number>
, List<? extends Object>
или * 1014.*, и List<Integer>
можно назначить всем трем.