Re: herencia y polimorfismo pete wrote:
> Hola. Tengo el siguiente problema
>
> Defino la clase base Emple y la clase derivada Jefe. A continuación declaro
> un array de Emple donde meto instancias de Emple y Jefe indistintamente para
> tener una "colección heterogénea".
>
> Emple e[] = new Emple[5];
> e[0] = new Emple("Luis", "V", 1000);
> e[1] = new Jefe("RRHH", "Pepe", "V", 1500);
> etc.
>
> Si invoco un método de Emple con un objeto Jefe del array, me lo ejecuta sin
> problemas, pero si trato de ejecutar un método de Jefe (para el objeto e[1],
> por ejemplo, me da error diciendo que no encuentra ese método en Emple o
Claro.
e[1] está declarado como de tipo Emple (por pertenecer a un Emple[]). Lo
único que puedes garantizar es que e[1] tiene los métodos declarados en
Emple.
Dicho de otra manera. Para decidir qué métodos puedes utilizar, debes
considerar el tipo declarado (Emple) y no el tipo real (Jefe).
Una cosa que puedes hacer es:
if (e[1] instanceof Jefe)
((Jefe)e[1]).metodoDeJefe();
Es decir, primero te aseguras de que el tipo real de la referencia es el
que tú crees que es, y luego invocas el método de Jefe, previo cast a Jefe.
Pruébalo. Seguro que funciona. Pero no te olvides de la comprobación
inicial del tipo.
Saludos
> algo muy parecido. ¿Cuál es el problema? He intentado poner "cast" y no me
> lo admite. ¿Puede ser un problema de constructor de copia? No lo veo claro.
> Si alguien tiene alguna pista, se lo agradecería...
>
> Gracias.
>
> |