Icono play
Java
Implementación de una interface

En Java no existe la herencia múltiple como en otros lenguajes, para cumplir la misma función de implementar los métodos abstractos creados en una clase superior, lo hacemos a través de interfaces, que implementan o ejecutan las subclases.

¿Qué es una interface en java?

Una interface en Java es una especie de plantilla, marco o receta, para realizar una tarea.

Consiste en una colección de propiedades constantes estáticas y métodos abstractos sin cuerpo (no hay código ni sentencias dentro de ellos) que nos especifica qué se debe hacer, pero no cómo hacerlo.

Utilidad de las interfaces en Java

Las principales utilidades de las interfaces son ahorrar código, refactorizaciones más limpias, reutilización de métodos y modificaciones más simples en nuestros programas.

Generalmente se utiliza este recurso cuando queremos unificar comportamientos en las clases inferiores, que no tienen nada que ver una con la otra. 

Las interfaces son el factor común entre clases que no pertenecen a una misma jerarquía.

Aplicación y comportamiento de interfaces en Java

En Java, para indicar que una clase implementa una interface se utiliza la palabra reservada implements seguida del nombre de la interface.

Las clases hijas o subclases serán las que describan la lógica e implementación de los métodos vacíos de una interface, y los adecuarán a su necesidad de uso.

Cada método abstracto declarado dentro de la clase superior, será sobrescrito por la subclase que lo implemente.

Esta subclase podrá tener además, sus propios métodos con acceso público, privado o protegido, pero nunca podrá evitar el uso de todos y cada uno de los métodos exigidos por la interface que está implementando.

Cómo declarar una interface en Java

Este elemento se declara de forma muy similar a una clase, consta de dos componentes, la definición o nombre dado y el o los métodos abstractos que desea que implementen las clases hijas.

En forma esquemática sería:

public interface  [nombredelainterface]{

     void [metodoabstracto1]();

void [metodoabstracto2]();

void [metodoabstracton]();
}

Supongamos que debemos desarrollar una aplicación que informe qué tipo de método se ha utilizado para enviar un mensaje, podríamos hacer lo siguiente:

  • Creamos una interfaz llamada “Comunicación”, con un método denominado “mensaje” sin cuerpo.
  • Creamos la o las subclases que deberán implementar el método, por ejemplo “CorreoConvencional”“CorreoElectronico”
  • Por último creamos la clase principal de nuestro programa, el “Main” e instanciamos las clases, recordemos que sin el “Main” no se podrá ejecutar nuestra API.

Las subclases o clases hijas, deberán adaptar (sobrescribir) de manera conveniente ese código a ejecutar dentro del método y la forma en la que va a implementarse.

Veamos este ejemplo en código:

//CREAMOS LA INTERFACE (CLASE SUPERIOR):

package Correo;
//Esta es la clase superior que dará la pauta de lo que deben implementar las clases hijas

public interface Comunicacion {

       void mensaje();
}  
//CREAMOS LAS SUBCLASES QUE VAN A IMPLEMENTAR LA INTERFACE:

package Correo;
//Esta es la primer clase hija
   public class CorreoConvencional implements Comunicacion {
        @Override  //indica sobrescritura del método

        public void mensaje() {

        }
        String mensaje1  = "Este mensaje ha sido enviado a través de correo postal";

        @Override 
       public String toString() {

            return "CorreoConvencional" +

                    " mensaje1=" + mensaje1;        
              }
    }
    
package Correo;
//Esta es la segunda clase hija

public class CorreoElectronico implements Comunicacion {
    @Override  //indica sobrescritura del método

    public void mensaje() {

    }

    String mensaje2  = "Este mensaje ha sido enviado desde un dispositivo electrónico";

    @Override  

    public String toString() {

        return "CorreoElectronico" +

                " mensaje2=" + mensaje2;      
       }
}
//CREAMOS EL MAIN (PUNTO DE ENTRADA A NUESTRA APLICACIÓN):

package Correo;
//Este es el Main o cuerpo principal de nuestra API

public class Main {

    public static void main(String[] args) {

        Comunicacion mensaje1 = new CorreoConvencional();
        System.out.println(mensaje1);

        Comunicacion mensaje2 = new CorreoElectronico();
        System.out.println(mensaje2);
    }
}

Que tener en cuenta a la hora de crear una interfaz en Java

  • Los nombres de las interfaces deben comenzar con una letra mayúscula.
  • La palabra reservada “public” indica que la interface podrá ser llamada por cualquier clase desde cualquier paquete y utilizada en algún punto del programa.
  • Una clase puede implementar más de una interface separando sus nombres con coma (,) para lo cual debe, obligatoriamente, proporcionar la definición completa de los métodos declarados en todas las interfaces que va a implementar.
  • Una subclase a pesar de que puede implementar varias interfaces, no puede tener más de una clase ascendiente directa.
  • Una subclase “hereda” todas las constantes y métodos de sus clases superiores.
  • La declaración de una interface no lleva constructor, por lo tanto no podemos invocar el operador new para instanciar una clase dentro de ella.

Diferencias entre Clases Abstractas e Interfaces.

Aunque son conceptos similares, no debemos confundir las interfaces con las clases abstractas ya que tienen grandes diferencias entre sí:

Clase AbstractaInterfaz
Una clase abstracta puede permitir la implementación de una interface.Una interface no puede permitir la implementación de una clase abstracta.
Puede tener métodos con implementaciones, pero siempre debe contar un método abstracto obligatorioProporciona una abstracción absoluta y no puede tener implementaciones de métodos, ni puede instanciar clases.
No admite herencias múltiples.Es compatible con herencias múltiples.
Puede tener modificadores de acceso públicos, privados, estáticos y protegidos.Los métodos son necesariamente públicos y abstractos en la interface de Java, para permitir el uso desde cualquier punto del programa.
¿Todavía no te has apuntado a nuestro Bootcamp?
Tenemos muchos cursos para ofrecerte y ¡TOTALMENTE GRATIS! Estos son algunos de ellos: