overloadedMethod(ArrayList<Integer> o)
не подходит, поскольку объявленный тип параметра l
равен List
, а не ArrayList
, и перегрузка не выполняется в отношении динамических типов.
overloadedMethod(List<Number> o)
не делает 'также не подходит, потому что аргументы универсального типа не совпадают.В Java нет ковариантных или контравариантных обобщений, таких как C #, поэтому List<Number>
и List<Integer>
не имеют отношения подтипа.
Следовательно, лучшая перегрузка overloadedMethod(Collection<?> o)
, поскольку два другихматч.