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.