Tracks
/
Java
Java
/
Temario
/
Interfaces
In

Interfaces en Java

1 ejercicio

Acerca de Interfaces

interfaces son el medio principal para desacoplar los usos de una clase de su implementación. Este desacoplamiento aporta flexibilidad para el mantenimiento de la implementación y ayuda a respaldar un comportamiento genérico con seguridad de tipos.

La sintaxis de una interfaz es similar a la de una clase, salvo que los métodos aparecen solo como firma y no se proporciona cuerpo.

public interface Language {
    String speak();
}

public interface ItalianLanguage extends Language {
    String speak();
    String speakItalian();
}

public interface ScriptConverter {
    void setVersion(String version);
    String getVersion();
    String convertCyrillicToLatin(String cyrillic);
}

La clase que la implementa debe implementar todas las operaciones definidas por la interfaz.

Las interfaces suelen hacer una o varias de las siguientes cosas:

  • Permitir que el código que las usa trate varias clases distintas de forma genérica. En este caso, las interfaces desempeñan el mismo papel que una clase base. Un ejemplo de esto es java.io.InputStream,
  • Exponer un subconjunto de funcionalidad para algún propósito concreto (como Comparable<T>)
  • Exponer la API pública de una clase para que puedan coexistir varias implementaciones. Un ejemplo es el de un doble de prueba
public class ItalianTraveller implements ItalianLanguage {

    public String speak() {
        return "Ciao mondo";
    }

    public String speakItalian() {
        return speak();
    }
}

public class ItalianTravellerV2 implements ItalianLanguage {

    public String speak() {
        return "migliorata - Ciao mondo";
    }

    public String speakItalian() {
        return speak();
    }
}

public class FrenchTraveller implements Language {
    public String speak() {
        return "Ça va?";
    }
}

public class RussianTraveller implements Language, ScriptConverter {

    private String version;

    public void setVersion(String version) {
        this.version = version;
    }

    public String getVersion() {
        return version;
    }

    public String speak()
    {
        return "Привет мир";
    }

    public String convertCyrillicToLatin(String cyrillic) {
        throw new UnsupportedOperationException();
    }
}

public class DocumentTranslator implements ScriptConverter {

    private String version;

    public void setVersion(String version) {
        this.version = version;
    }

    public String getVersion() {
        return version;
    }

    public String translate(String russian) {
        throw new UnsupportedOperationException();
    }

    public String convertCyrillicToLatin(String cyrillic) {
        throw new UnsupportedOperationException();
    }
}

El código que usa las interfaces y clases anteriores puede:

  • Tratar a todos los hablantes de la misma manera, independientemente del idioma.
  • Permitir que algún subsistema que se encarga de la conversión de escrituras funcione sin importar con qué tipos concretos está tratando.
  • No enterarse de los cambios en el hablante italiano, lo cual resulta cómodo si el código de la clase y el código de usuario los mantienen equipos distintos.

Las interfaces se usan ampliamente para facilitar las pruebas, ya que permiten una simulación sencilla.

Las interfaces pueden extender otras interfaces con la palabra clave extend.

Los miembros de una interfaz son públicos por defecto.

Las interfaces pueden contener tipos anidados: interfaces, enums y classes. Aquí, las interfaces contenedoras actúan como espacios de nombres. Se accede a los tipos anidados desde fuera de la interfaz anteponiendo el nombre de la interfaz y usando la sintaxis de punto para identificar el miembro.

Por diseño, Java no admite la herencia múltiple, pero facilita una especie de herencia múltiple a través de las interfaces.

Además, el concepto de que el polimorfismo se puede implementar a través de las interfaces sustenta el mecanismo de las interfaces.

Editar en GitHub El enlace se abre en una nueva ventana o pestaña

Aprende Interfaces