Foros del Web » Programación para mayores de 30 ;) » Java »

Duda sobre interfaces

Estas en el tema de Duda sobre interfaces en el foro de Java en Foros del Web. Hola!, me ha surgido una duda sobre las interfaces en Java. Vereis, tengo una clase abstracta llamada Docente , dicha clase tiene un atributo que ...
  #1 (permalink)  
Antiguo 08/06/2007, 09:21
 
Fecha de Ingreso: mayo-2007
Mensajes: 222
Antigüedad: 17 años
Puntos: 0
Pregunta Duda sobre interfaces

Hola!, me ha surgido una duda sobre las interfaces en Java.

Vereis, tengo una clase abstracta llamada Docente, dicha clase tiene un atributo que se llama antiguedad, tambien tiene un metodo que obtiene la antiguedad, (obtAntiguedad). Dicha clase tendra mas abajo clases que se puedan instanciar.

En otra parte de la jerarquia tengo una clase que se llama ProfAyudante dicha clase tambien tiene un atributo antiguedad, su correspondiente metodo obtAntiguedad.

De los Docentes se tiene que saber su antiguedad, y de los profesores ayudantes lo mismo. Es por esta razon que se me ha ocurrido hacer lo que os he comentado arriba. Para hace esto, Java a no soportar herencia multiple, luego hay que hacerlo mediante interfaces. Creo una interfaz Profesor, con el metodo obtAntiguedad(). Solo pongo la cabecera del metodo.

Despues tanto en la clase Docente y ProfAyudante, implemento el metodo.

Todo normal (al menos eso es lo que yo creo), ejecuto y funciona. Pero.......resulta que me da por quitar el implements Profesor tanto de la clase Docente como de la de ProfAyudante, y veo que el programa funciona igualmente. En teoria eso no deberia de pasar, (deberia de darme algun error ya que uso interface, para que sepa el programa que el metodo obtAntiguedad() es implementado en las 2 clases anteriores).

Entonces , ¿que es lo que ocurre? Yo creo de pudiera ser que aun habiendo quitando el implements, el programa a la hora de ejecutar coge los metodos obtAntiguedad(), como si fueran propios de la clase, olvidandose de la interfaz declarada. Aunque tal y como yo he hecho el ejercicio deberia de darme algun error ya que la finalidad de este es hacerlo con interfaces. Pero no se........

La verdad es que me ha dejado trastocado.

A ver si alguien puede saber a que es debido esto.

Un Saludo.
  #2 (permalink)  
Antiguo 08/06/2007, 09:54
 
Fecha de Ingreso: mayo-2007
Mensajes: 222
Antigüedad: 17 años
Puntos: 0
Re: Duda sobre interfaces

Alguien sabe....?
  #3 (permalink)  
Antiguo 08/06/2007, 10:08
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Duda sobre interfaces

1.- Sin ver el código se hace difícil adivinar cual es el problema.
2.- Implementar una interfaz sirve para acceder a esa clase a través de la interfaz, pero quitándola no haces que no se pueda acceder a sus metodos si accedes directamente.
3.- Si al quitar la interfaz tuvieras un error, te lo deberia detectar el compilador.
4.- Si en media hora te impacientas por que nadie te contesta... recomiendo tila . Esto es un foro voluntario, no un servicio técnico .

S!
  #4 (permalink)  
Antiguo 08/06/2007, 12:54
 
Fecha de Ingreso: mayo-2007
Mensajes: 222
Antigüedad: 17 años
Puntos: 0
Re: Duda sobre interfaces

Hola GreenEyed!

La verdad es que si que me he impacientado, porque en cierta forma me urge resolver esa duda. De algo que creia que lo tenia superado. Siento haber sido tan impaciente.

Respecto al punto 1,2 del mensaje, la verdad es que me he quedado como estaba. Aunque comprendo que asi es dificil que poder ayudarme. Como no hay boton para adjuntar archivos lo unico que se me ocurre es mandarte por correo, para que le echaras un vistazo, no es ni mucho codigo ni dificil de entender, aunque son unas pocas clases, (bueno las que importan son 2 clases , anteriormente comentadas), pero igual es mucho pedir, jeje.

un saludo y gracias otra vez por contestar.
  #5 (permalink)  
Antiguo 08/06/2007, 13:17
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Duda sobre interfaces

Jejeje, tranquilo, no es que me sepa mal (ni que eso importara ). Sólo es que a veces la gente no mira el foro etc. así que los foros hay que pensarlos como un extra, pero no son algo de lo que depender.

En cuanto al punto en cuestion, lo que quiero decir es que imagina que tienes una interfaz InterfazC con un metodo getX() y unas clases ClaseA y ClaseB que lo implementan. Si en tu codigo haces
InterfazC miElementoA = new ClaseA();
miElementoA.getX();
....
entonces, si haces que ClaseA no implemente InterfazC entonces el compilador se tiene que quejar y no podrás compilar la clase.
En cambio, si simplemente haces:
ClaseA miElementoA = new ClaseA();
miElementoA.getX();
Aunque hagas que la ClaseA deje de implementar InterfazC, no por eso deja de tener ese método, así que no hay nada malo en ese programa.

¿Así más claro?
S!
  #6 (permalink)  
Antiguo 08/06/2007, 13:28
 
Fecha de Ingreso: mayo-2007
Mensajes: 222
Antigüedad: 17 años
Puntos: 0
Re: Duda sobre interfaces

hola otra vez.Creo que el fallo es que yo hago lo segundo que tu dices.Creo que tengo volver a recomponer mis esquemas sobre esto ya que hasta ahora lo que he estado haciendo mal. Es mas lio de lo que yo creia.

un saludo.
  #7 (permalink)  
Antiguo 08/06/2007, 17:08
 
Fecha de Ingreso: mayo-2007
Mensajes: 222
Antigüedad: 17 años
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
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:13.