Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Casting de un padre a un hijo

Iniciado por jalbam, 26 de Marzo de 2008, 06:23:53 PM

« anterior - próximo »

jalbam

Hola, buenas.

Tengo una duda con Java. Yo tenía entendido que es posible hacer un casting de un objeto "hijo" a uno "padre" (convertir un objeto que es la instancia de una clase que hereda de un padre, a una instancia de este padre), pero no al revés.

Por ejemplo, haciendo esto:

Padre padre = (Padre) hijo;

Pero no estaría permitido hacer esto otro:

Hijo hijo = (hijo) padre;

Recuerdo que Padre es una clase no abstracta, e Hijo es una clase tampoco abstracta y que hereda de Padre.

Sin embargo, Java me deja hacer esto:

Hijo hijo = (hijo) padre;


Pero no me deja hacer esto:

Hijo hijo = (hijo) new Padre();

¿Qué diferencia hay entre hacer casting a un objeto ya instanciado a hacerlo de una nueva instancia? Lo único que cambia a mi modo de ver es la forma de escribirlo (con un new), pero parece ser que para Java no. Java compila en ambos casos, pero en el segundo (con el new) da error lanzando una excepción.

Ya que estamos, esta duda me viene de que me he dado cuenta que es muy común hacer un casting de un objeto Graphics y convertirlo en Graphics2D, cuando Graphics2D es "hijo" de Graphics. ¿Cómo es posible  que se pueda convertir un objeto padre a un hijo? ¿Qué pasa con los métodos y propiedades que el padre no tenga? Si se pierden, ¿para qué nos sirve el casting?. Por cierto, ambas clases (Graphics y Graphics2D) son abstractas (a diferencia del ejemplo anterior con las clases Hijo y Padre, que no lo eran).

Siento la torpeza. Espero que alguien despeje estas dudas, que seguro que sí con los expertos que hay aquí ;)

Gracias por todo.
-----
Juan Alba Maldonado






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.