When you use extends to denote a type parameter bound, you are not requiring a
subclass-superclass relationship, but merely a subtype-supertype relationship. It is also important to remember that the bounded type does not need to be a strict subtype of the bound; it could be the bound as well.
In other words, for a Collection<? extends Number>, you could assign a Collection<Number> (although Number is not a strict subtype of Number) as well as a Collection<Integer>, Collection<Long>, Collection<Float>, and so on but you can not assign a Collection <Object> even though Object is a superclass of Number