¿De qué sirve decir <? extiende SomeObject> en lugar de <SomeObject>

Así que estaba revisando un código Java y tropecé con:

List<? extends SomeObject> l;

Básicamente, esta lista acepta todos los objetos que son algún tipo de SomeObject - SomeObject o sus herederos. Pero según el polimofismo, sus herederos también pueden ser vistos como SomeObject, por lo que esto también funcionaría:

List<SomeObject> l;

Entonces, ¿por qué alguien usaría la primera opción cuando la segunda está claramente definida y es prácticamente idéntica?

Respuestas a la pregunta(5)

Su respuesta a la pregunta