This is a case of a "upper bounded" type. What "? extends K" means is that every object contained extends K.
The reason all this "boundedness" is needed is fairly complicated. It's because ther restriction on what you're going to get out of the collection aren't necessarilly the same as the restrictions on what you're allowed to put into it.
If I've got, say List<Dog> then I can assign it to a reference of
List<? extends Animal>
because a list of Dogs is always going to return objects assignable to animal.
On the other hand I can't safely add an object of type animal to a reference of
List<? extends Animal> because the list it points to might be restricted to Dog (or Cat) and the Animal might be the wrong species.
So LIst<? extends Animal>
means "a list from which everything returned will
be assignable to Animal." (of which a List<Dog> is an example.
On the other hand:
List<? super Dog>
means "A list to which it's safe to add Dogs". of which a List<Animal> would be an example.