Ver Mensaje Individual
  #2 (permalink)  
Antiguo 13/01/2015, 04:46
Avatar de Xerelo
Xerelo
 
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 5 meses
Puntos: 306
Respuesta: [Ayuda]Upcast y downcast

Un ejecutivo es un empleado, supón que quieres controlar las vacaciones de todos los empleados.

¿Tendrías una List para los empleados y otro para los ejecutivos? Podrías, pero sería mejor solución tener todos en un mismo List. Por ejemplo

List<Empleado> empleados

Cuando añades ejecutivos a ese listado estás haciendo un upcast, ya que estás diciendo que un Ejecutivo se "comporte" como un Empleado. Cuando lo recuperes de esa lista será un Empleado.

¿Qué sucede si quieres ver el sueldo y resulta que los ejecutivos tienen un bono que no tienen los empleados?

Como lo has recuperado de la lista "es" un empleado, no puedes acceder al bono. Ahí entra el downcast, ya que mediante el cast dirías que un Empleado realmente es un Ejecutivo, y por lo tanto ya podrías acceder al bono.

(Ejecutivo) empleados.get(1)

El downcast tiene un peligro, que el hecho de que sea Empleado no significa que sea un ejecutivo, por lo que es algo que debe ser controlado por el código.

Esto es un ejemplo de para qué sirve, pero tiene más usos. Deberías leer sobre polimorfismo.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.