Tracks
/
Java
Java
/
Temario
/
Interfaces
In

Interfaces en Java

1 ejercicio

Acerca de Interfaces

Las interfaces son el medio principal para desacoplar los usos de una clase de su implementación. Este desacoplamiento brinda 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, excepto que los métodos aparecen solo como la firma y no se proporciona un 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.

Por lo general, las interfaces hacen una o más de las siguientes cosas:

  • Permiten que el código que las usa trate de forma genérica a varias clases diferentes. En este caso, las interfaces cumplen el mismo papel que una clase base. Un ejemplo de esto es java.io.InputStream,
  • Exponen un subconjunto de funcionalidades para algún propósito específico (como Comparable<T>)
  • Exponen la API pública de una clase para que puedan coexistir varias implementaciones. Un ejemplo es el de un test double
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, sin importar el idioma.
  • Permitir que algún subsistema que se encarga de la conversión de escritura funcione sin preocuparse por los tipos específicos con los que trata.
  • Mantenerse sin conocimiento de los cambios en el hablante italiano, lo cual es conveniente si el código de la clase y el código de usuario los mantienen equipos diferentes.

Las interfaces se usan ampliamente para facilitar las pruebas, ya que permiten un mocking sencillo.

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 al 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 ventana o pestaña nueva

Aprende Interfaces