acceder objetos de distintas clases en vector

pricipiantejava
14 de Febrero del 2006
soy nuevo usando java, lo que quiero hacer es en un vector guardar objetos de distintas clases he definido las clases Empleado , que hereda sus atributos y metodos a las clases Secretaria y Gerente, conforme pido los datos del teclado voy guardando en el vector los objetos ya sea un empleado general,una secretaria o un gerente, pero a la hora de acceder a dichos objetos en el vector, tengo que crear una referencia al objeto que quiero acceder, por ejemplo si utilizo Enumeration para acceder a ellos tendria algo asi
Empleado emp= (Empleado)enum.nextElement() y al usar enum tengo que hacer un cast(creo que asi se llama no me acuerdo bien)para decir que es de la clase empleado. pero mi duda es si ese elemento no es de la clase empleado, obviamente va ver una exception a la hora de la ejecucion, como puedo saber de antemano de que clase es para poder acceder a la informacion del objeto, no se si al utilizar el vector esta bien para guardar objetos de distintas clases, por que si lo uso solo para una clase no hay problema, yase que tipo de cast puedo hacer a la hora de referenciarlo, no se si me sugieren otro metodo para guardarlos, la verdad estoy empezando en esto de java, en c++ no me pasaba esto , ya saben por el uso de apuntadores, no creo que en java el no permitir el uso de apuntadores sea un limitante para hacer este tipo de cosas, es cosa nada mas de que me orienten, mucho se los agredecere.

rubece
14 de Febrero del 2006
Hola, debes usar el operador instanceof para comprobar de que clase son. Se usa así:

o instanceof c

Devuelve true si o es un objeto de la clase c y false en caso contrario. Pero úsalo con cuidado. En tu caso particular todos los objetos de tu vector son objetos de Empleado, ya que cada objeto de una clase hija también pertenece a una clase padre. Por tanto, o instanceof Empleado te devolverá true siempre, donde o es cualquier elemento de tu vector. Como tienes objetos que pueden ser de la clase Empleado, Secretaria o Gerente, deberás comprobar primero si son de las clases hijas (Secretaria y Gerente) y después comprobar la clase padre (Empleado). Es decir:

Empleado emp= (Empleado)enum.nextElement();
if (emp instanceof Secretaria)
// Entonces es una secretaria
else if( o instanceof Gerente)
// Entonces es un gerente
else if(o instanceof Empleado)
// Entonces es un empleado que no es ni secretaria ni gerente
else
// No es empleado

Si hicieras primero el if de Empleado instanceof te ejecutaría siempre rama del if (sea secretaria, gerente u otro tipo de empleado).

Bueno creo que eso es todo. Quizás me haya enrollado bastante, pero bueno, mejor que sobre que no que falte. Que te vaya bien y hasta otra.