Starting with Java 1.5, When you have generics, List<String> (a List
guaranteed to contain nothing but Strings) and
List<?> (a List
containing any sort of Object) are considered the same
class, however, List<String> is a subtype of List<?> because every
List<String> is also a List<?>. When you override a method, you have the option of
returning an object of a subtype of the one returned by the method in the base class.
In other words, you can narrow but not widen what the method can return.