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

Duda relacionada con interfaces

Estas en el tema de Duda relacionada con interfaces en el foro de Java en Foros del Web. Buenas, tengo el siguiente problema. Resulta que tengo una interfaz y dos clases. Os lo muestro: INTERFAZ Código: public interface IImpresion { public String imprimir(); ...
  #1 (permalink)  
Antiguo 24/02/2016, 15:12
 
Fecha de Ingreso: febrero-2014
Mensajes: 60
Antigüedad: 10 años, 1 mes
Puntos: 0
Duda relacionada con interfaces

Buenas, tengo el siguiente problema. Resulta que tengo una interfaz y dos clases. Os lo muestro:

INTERFAZ
Código:
public interface IImpresion {
   public String imprimir();
}

CLASE PERSONA NEGATIVA
Código:
public class CNegativo implements IImpresion{

    String mensaje;

    public CNegativo() {
        mensaje = "Odio los lunes";
    }
    
    
    
    @Override
    public String imprimir() {
        return mensaje;
    }
    
    
}

CLASE PERSONA POSITIVA
Código:
public class CPositivo implements IImpresion {
    
    String mensaje;

    public CPositivo() {
        mensaje = "Que buen tiempo hace";
    }
    
    
    
    @Override
    public String imprimir() {
        return mensaje;
    }
    
}


MAIN
Código:
public static void main(String[] args) {
        
        List lista = new ArrayList();
        
        lista.add (new CPositivo());
        lista.add (new CNegativo());
        
        Iterator iterador = lista.iterator();
        
        
        while(iterador.hasNext()){
            
            IImpresion clase = (IImpresion)iterador.next();
            System.out.println(clase.imprimir());
        }
        
    }
Como veis, en el programa principal creo una lista, en la cual meto una Clase persona positiva y una Clase persona negativa.

Luego quiero recorrer la lista con un iterator, y para sacar cada uno de ellos, casteo el iterador a la Interfaz. Para mi sorpresa, cuando llamo al metodo imprimir(), resulta que me saca la variable mensaje de cada una de las clases, sin haber casteado el iterator a ninguna de las clases.

¿A que se debe esto? Si no me he explicado bien, intentaré explicar mejor mi duda :)
  #2 (permalink)  
Antiguo 24/02/2016, 15:58
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Duda relacionada con interfaces

Hola:

Esa es la gracia del asunto, poder llamar al método de la interfaz y que se ejecute el método de la clase concreta que haya en la posición del array. Es lo que en orientación a objetos se conoce como polimorfismo.

Has hecho dos new, uno de CPositivo y otro de CNegativo, así que en memoria tienes dos objetos, uno CPositivo y otro CNegativo. Cuando guardas estos objetos, dentro del bucle, en una interrfaz, los objetos en memoria siguen siendo los mismos, no cambian aunque los guardes en una variable de otro tipo (una interfaz que implementen), así que cuando llamas al método imprimir() de la interfaz, se ejecuta el método del objeto que realmente hay en memoria y que está guardado en ese momento en la interfaz.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 24/02/2016, 16:44
 
Fecha de Ingreso: febrero-2014
Mensajes: 60
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Duda relacionada con interfaces

Con razon, ya quedó mas aclarado. Muchas gracias. +1 :)

Etiquetas: clase, interfaces, programa, string
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 13:40.