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

Problema con interfaces

Estas en el tema de Problema con interfaces en el foro de Java en Foros del Web. Hola! Estoy realizando un programilla que usa una interfaz y que cuando voy a implementar un metodo que deberia de llamar a los metodos que ...
  #1 (permalink)  
Antiguo 29/07/2007, 17:02
 
Fecha de Ingreso: mayo-2007
Mensajes: 222
Antigüedad: 17 años
Puntos: 0
Problema con interfaces

Hola!

Estoy realizando un programilla que usa una interfaz y que cuando voy a implementar un metodo que deberia de llamar a los metodos que implementan dicha interfaz, el Netbeans me saca el siguiente error :
cannot find simbol
symbol : method dondeIR()
location: class packTurismo.Visita

vereis :

tengo una interface IExtra --> la declaro. el metodo de la intefaz es --> public boolean dondeIR();

Tengo una clase llamada Alternativa que hereda de una llamada Basica y un metodo de esta clase implementa dicha interfaz.

public class Alternativa extends Basica implements IExtra
{
.....

public boolean dondeIR()
{
if (this.irSidreria)
{
return true;
}
else
return false;
}
}


Tengo tambien otra clase llamada DoceHorasGastronomica que hereda de una llamada DoceHoras y un metodo de esta clase implementa dicha interfaz.
public class DoceHorasGastronomica extends DoceHoras implements IExtra
{........

public boolean dondeIR()
{
if (this.irSidreria)
{
return true;
}
else
return false;
}
}

Despues tengo en otra clase otro metodo que va a llamar a las clases dentro de la jerarquia, que hayan implementado dicho metodo.


public void cuantosVan(Date pFecha)
{
......
while(it.hasNext())
{
v=(Visita)it.next();

if (v.getFecha().compareTo(p)==0)
{
encontrado=true;
}
if (encontrado)
{
if (v instanceof IExtra)
{
if (v.dondeIR())
{
alaSidre++;
}
else
alaTxako++;
}
}
encontrado=false;
}
...
}

El error me lo da en la linea enmarcada en negrita, que es donde el Netbeans saca una bombilla para sugerirme que cree ese metodo en la superclase sobre la que heredan todas las demas clases. Dicha superclase es abstracta.

Y yo no quiero hacer eso , yo quiero que el programa recorra todas las clases, pero que utilice la interfaz que yo he declarado, para esas 2 clases y que de esta forma distinga de las clases que no utilizan esa interfaz.

No se donde fallo.

A ver si me podeis echar una mano.

S2.
  #2 (permalink)  
Antiguo 29/07/2007, 21:33
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: Problema con interfaces

Hola:

Tienes que hacer un "cast", ya que la clase con la que declares v posiblemente no tiene ese método

if (v instanceof IExtra)
{
if ((IExtra)v.dondeIR())
{

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 30/07/2007, 02:40
 
Fecha de Ingreso: mayo-2007
Mensajes: 222
Antigüedad: 17 años
Puntos: 0
Re: Problema con interfaces

Cita:
Iniciado por chuidiang Ver Mensaje
Hola:

Tienes que hacer un "cast", ya que la clase con la que declares v posiblemente no tiene ese método

if (v instanceof IExtra)
{
if ((IExtra)v.dondeIR())
{

Se bueno.
Hola.

Aunque es cierto que esa clase abstracta no tiene, declarado ese metodo, sigue apareciendo el mismo error.

S2!
  #4 (permalink)  
Antiguo 30/07/2007, 03:25
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: Problema con interfaces

Hola:

Si has puesto el cast debería funcionar y el error debería ser otro. Por si acaso, pon más paréntesis

if ( ((IExtra)v).dondeIR() )

Si sigue saliendo el mismo error -simbolo no encontrado- en esa misma línea, revisa que el método dondeIR() lo has escrito exactamente igual que en la interface y revisa también que no tienes una segunda interface IExtra en otro sitio sin querer que no tenga ese método.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 30/07/2007, 03:55
 
Fecha de Ingreso: mayo-2007
Mensajes: 222
Antigüedad: 17 años
Puntos: 0
Re: Problema con interfaces

Cita:
Iniciado por chuidiang Ver Mensaje
Hola:

Si has puesto el cast debería funcionar y el error debería ser otro. Por si acaso, pon más paréntesis

if ( ((IExtra)v).dondeIR() )

Si sigue saliendo el mismo error -simbolo no encontrado- en esa misma línea, revisa que el método dondeIR() lo has escrito exactamente igual que en la interface y revisa también que no tienes una segunda interface IExtra en otro sitio sin querer que no tenga ese método.

Se bueno.


Hola otra vez, he puesto if ( ((IExtra)v).dondeIR() ) y ahora si funciona.

¿A que es debido que tenga que poner que if ( ((IExtra)v).dondeIR() ) para que funcione en vez if (v.dondeIR()) ?¿ A que la superclase no tiene ese metodo declarado, y por mucho que le pregunte a un objeto si es instancia de la Interfaz para que ejecute el metodo no lo va a hacer?

Muchisima gracias por tu ayuda.

S2!
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 00:33.