Ver Mensaje Individual
  #5 (permalink)  
Antiguo 13/01/2015, 12:49
Avatar de chuidiang
chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años
Puntos: 454
Respuesta: [Ayuda]Upcast y downcast

Hola:

Cuando haces un new de una clase (Empleado), en memoria tienes una clase Empleado.

Puedes guardar esa zona de memoria en una variable de tipo Empleado o en una variable cuyo tipo sea padre de Empleado. Es decir, estas dos cosas, si Persona es padre de Empleado, son válidas

Persona p = new Empleado();
Empleado e = new Empleado();

El problema de guardar un Empleado en una variable de tipo Persona, es que en memoria sigues tieniendo un Empleado, pero no puedes acceder a los métodos propios de Empleado que no tiene Persona. Si Empleado tiene un método unMetodo() que no tiene Persona, no puedes llamarlo de ninguna manera, ya que p.unMetodo() te protestará en compilado.

Como p tiene realmente en memoria un Empleado, la forma de recuperarlo para poder usar todos sus métodos, es hacer el "cast" que has hecho

Empleado e = (Empleado) p;

¿Por qué guardar un Empleado en una variable de tipo Persona?. Porque puedes hacer un método que trate con Persona, llamando por ejemplo a su método getNombre(), estilo este

Código Java:
Ver original
  1. public void escribeNombre(Persona p) {
  2.     System.out.println(p.getNombre());
  3. }

y podrías llamar a este método con una Persona, con un Empleado o incluso con una clase que todavía no existe y que hagas más adelante que sea hija de Persona.

También, como dice Xerelo, puedes hacer una lista de Personas y meter ahí Empleados, Personas o lo que quieras, mezclados.

Se bueno.
__________________
Apuntes Java
Wiki de Programación