Ver Mensaje Individual
  #6 (permalink)  
Antiguo 06-07-2006, 15:00:51
emiedes
 
Mensajes: n/a
Predeterminado 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.
>
>

Responder Con Cita