Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Baal_30 en 16 Mayo 2015, 23:21 pm



Título: Objeto de clase heredada en super clase
Publicado por: Baal_30 en 16 Mayo 2015, 23:21 pm
Muy buenas, hoy vengo con una pregunta un poco noob a mi parecer, pero tengo la duda desde hace tiempo y quisiera aclararlo ya :P

La teoría dice que se puede guardar un objeto de la clase "hijo" en una variable declarada como el "padre", pero no al revés.

Mi duda surge al pensar que si guardas el "hijo" en una variable "padre" los atributos definidos en la clase "hijo" se perderán ¿cierto?

En cambio, una clase "hijo" tiene como mínimo, todos los atributos de la clase "padre" así que un "padre" cabría perfectamente en un objeto declarado como "hijo" ¿No?

¿Por que no es así, entonces?

Un abrazo y espero haberme explicado bien :P


Título: Re: Objeto de clase heredada en super clase
Publicado por: Chuidiang en 18 Mayo 2015, 21:21 pm
Hola:

Una variable en java no es más que una dirección de memoria donde está guardado un objeto.

Si haces new Hijo(), en memoria tienes un Hijo. Si la variable es de tipo padre o de tipo hijo da igual, el objetio en memoria es un Hijo.

Si asiganas variableTipoPadre = new Hijo(), no se pierde nada de lo que tenga Hijo, unicamente no puedes acceder a ello, porque variableTipoPadre no tiene acceso a los métodos/atributos de hijo (no sabe en qué dirección de memoria están guardados).

Puedes recuperar el hijo así

variableTipoHijo = (Hijo)variableTipoPadre

esto se conoce como "cast" y es valido siempre que en memoria haya un Hijo. Si no lo hay, dará error al ejecutar.

No puedes guardar un padre en un hijo porque un new Padre() es un objeto padre en memoria que no tiene métodos ni atributos de hijo. Si intentas esto

variableTipoHijo = new Padre()

da error, porque faltan todas las cosas de específicas de Hijo. variableTipoHijo.metodoDeHijo() estaría sin definir, en memoria no está ese método, puesto que en memoria hay un Padre.

Se bueno.


Título: Re: Objeto de clase heredada en super clase
Publicado por: Baal_30 en 18 Mayo 2015, 22:21 pm
Aaah de acuerdo, ahora lo entiendo ;)

Gracias ¡!