Estoy tratando de entender el polimorfismo de Java, y tengo una pregunta acerca de la idea de descifrar un objeto. Digamos que para este ejemplo tengo dos subclases de Perros y Gatos que heredan de un animal superclaseCómo abatir un objeto Java?
Por lo que entendí, la única manera de abatido un objeto es si este objeto ya de la buena tipo es, de esta manera:
Animal a = new Dog();
Dog d = (Dog) a;
Esto funciona ¿verdad?
Pero, ¿y si quiero crear un animal común sin saber qué sería, y luego lanzarlo cuando lo sepa, cómo puedo hacerlo?
Animal a = new Animal();
Dog d = (Dog) a;
Esto lanzará una ClassCastException en tiempo de ejecución ¿verdad?
La única manera que encontré para hacer esto es crear un nuevo constructor de perro que crea un perro de un animal normal:
Animal a = new Animal();
Dog d = new Dog(a);
con
public Class Dog extends Animal{
public Dog(Animal a){
super(a);
}
}
Así que mi pregunta es, ¿soy ¿Debo hacer esto?
- ¿Lo estoy haciendo de la mejor manera?
- ¿Se supone que no debo hacer esto en absoluto, si tengo que hacerlo significa que mi programa no está bien concebido?
- ¿Hay alguna manera mejor que me haya perdido?
¡Muchas gracias! nbarraille