Buenas tardes, dejo mi solución del ejercicio (archivo adjunto, pulsar en el icono para descargar estando logados en el foro), hay solo una flecha que no me cuadraba, la de listinProfesores que no usaba ProfesorInterino y yo si, es debido a que yo llamo a (temp instanceof ProfesorInterino) para distinguir los unos de los otros.
Pero hay algo que me ha descolocado un poco, y quizá ahora mismo estoy espeso, si alguien me arroja un poco de luz;
si un objeto inicialmente declarado como Profesor, en un momento dado tiene un ProfesorInterino y llamas a su método mostrarDatos(), ejecuta el mostrar datos de ProfesorInterino, sin necesidad de casting, yo creia que era ahí donde habia que hacer un cast necesariamente.
(si lo haces no da error pero el resultado es el mismo en ejecucion aparentemente al menos)
Con Iterator pasaria exactamente igual? o habría que hacer un cast al ser una copia del array.