2.5 Casting - ajpaez/OCA GitHub Wiki
(OCA Objectives 7.3 and 7.4)
Ya hemos visto como es posible usar variables de referencia de un tipo genérico para hacer referencia a tipos de objetos mas específicos. Pero que pasa si queremos recuperar la funcionalidad de la clase mas especifica, necesitamos hacer una casting a la variable del supertipo, esto se conoce como donwcast:
Animal animal = new Animal();
Dog d = (Dog) animal; //ó
d = Dog.class.cast(animal);
Se conoce como donwcast por hacer un casting hacia abajo en el árbol de herencia.
Al contrario del donwcasting, existe el upcasting, un casting realizado a un tipo mas genérico, por ejemplo:
Dog d = new Dog();
Animal a1 = d; // upcast ok with no explicit cast
Animal a2 = (Animal) d; // upcast ok with an explicit cast
Ambos upcasting compilan y se lanzan sin problemas porque un Dog IS-A Animal, por ello no se necesita el upcasting explicito, ya que un Dog es un Animal.