Нелегко, но я постараюсь быть как можно более конкретным:
в T max(Collection<? extends T> coll)
вы могли бы передать такой аргумент List<Animal> or List<Cat> or List<Dog>
, а в T wrongMax(Collection<T> xs)
, где T Животное, которое вы не можете передать как аргумент List<Dog>, List<Cat>
, конечно, в Runtime вы могли бы добавить объекты Cat или Dog в List<Animal>
, но во время компиляции вы не смогли бы передать подкласс Animal в Тип списка с другой стороны, в методе max
, который вы могли бы передать в качестве аргумента в методе wrongMax
. Извините за мой английский, я все еще его изучаю :), С уважением.