Suppose you can do this with a throw, this will lead to the following problem:
List<Son> ls = ...;
List<Father> lf = (List<Son>) ls;
lf.add(new Father());
Both lsand lfare pointing to the same instance, so you just add the object Fatherto the list of Sons.
Henry source
share