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 originalpublic void escribeNombre(Persona p) {
System.
out.
println(p.
getNombre()); }
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.