Ver Mensaje Individual
  #7 (permalink)  
Antiguo 08/06/2007, 17:08
bladu
 
Fecha de Ingreso: mayo-2007
Mensajes: 222
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: Duda sobre interfaces

Hola.

No consigo hacerlo asi que voy a poner el codigo a ver si me puedes echar una mano, (es corto):

La clase abstracta Docente, (habra ademas mas subclases hacia abajo):

public abstract class Docente extends Miembro implements IProfesor
{
private int antiguedad;


public Docente(String pDni,String pNombre, String pDireccion, String pMail,int pAntiguedad)
{
super(pDni,pNombre,pDireccion,pMail);
this.antiguedad=pAntiguedad;
}

public int obtAntiguedad()
{
return this.antiguedad;
}

public void mostrarInfo()
{
super.mostrarInfo();
System.out.println("La antiguedad es: "+this.obtAntiguedad());
}
}
-------------------------------------------------

La clase ProfAyudante, que se encuentra en otra parte de la jerarquia,(arriba de esta habra clases Alumno Doctorado, y Alumno, pero que como se ve no tienen nada que ver con la interface)


public class ProfesorAyudante extends AlumnoDoctorado implements IProfesor
{
private int antiguedad;


public ProfesorAyudante(String pDni, String pNombre, String pDireccion, String pMail, String pNombrePrograma,int pNumCred, int pAntiguedad)
{
super(pDni, pNombre, pDireccion, pMail, pNombrePrograma, pNumCred);
this.antiguedad=pAntiguedad;

public int obtAntiguedad()
{
return this.antiguedad;
}

public void mostrarInfo()
{
super.mostrarInfo();
System.out.println("La antiguedad del profesor ayudante es de : "+ this.obtAntiguedad());
}

}
----------------------------------------------------
La interfaz IProfesor:

public interface IProfesor
{
public int obtAntiguedad();
}
------------------------------------------
La MAE ListaMiembros que interactuara con la superclase Miembro:

import java.util.Iterator;
import java.util.Vector;
public class ListaMiembros
{
private static ListaMiembros miListaMiembros=null;
private Vector lM;

private ListaMiembros()
{
this.lM=new Vector();
}

public static ListaMiembros obtListaMiembros()
{
if (miListaMiembros==null)
{
miListaMiembros=new ListaMiembros();
}
return miListaMiembros;
}

private Iterator obtIterador()
{
return this.lM.iterator();
}

/* POST: Se inserta el miembro en el vector.
*
*@param m Miembro
*/

public void anadirMiembro(Miembro m)
{
this.lM.addElement(m);
}
/*
* POST: Se muestra la informacion del miembro
*/
public void mostrarInformacion(Miembro m)
{
m.mostrarInfo();

}
}
-----------------------------------------------
El problema lo tengo en que asi implementado no usa la interface, y yo quiero que use la interfaz IProfesor.

Del tal forma que el metodo mostrarInformacion pueda distinguir de una clase que implementa la interfaz de una que no. Intuyo que posiblemente el parametro Miembro m, no sea correcto pero es que al poner como parametro IProfesor m, el compilador me da con razon un fallo en el programa de prueba (que no es mas que un programa que creara instancias que cada clase no abstracta, y llama despues a cada instancia al añadirMiembro y al mostrarInformacion), al decirme que ese parametro puede valer para clases que implementen la IProfesor, pero al haber otras que no implementan, pues hay es donde da el error.

En definitiva que hago para que funcione tanto para unas clases como para otras.

Un saludo.

Última edición por bladu; 08/06/2007 a las 17:16