Why do I get a ClassCastException when I cast a Superclass[] to Subclass[]?
You have to know what it means to cast from one array type to another. Such a cast applies to the reference to the array; the cast does not apply to the elements of the array. The cast will fail if the array object is not the same class or a subclass of the type you are casting to. As with all casts of references, if the object the reference is pointing to is not of the correct class, a ClassCastException is thrown.