¡Suscríbete a mi canal de Youtube!

▷ INTERFACES en JAVA


Interfaces en Java

Para iniciar este tema debemos de aclarar algo, por "interfaces" no nos referimos a interfaces gráficas de usuario en Java (GUI - Graphic User Interface), nos referimos un poco más a temáticas más apegadas con Herencia y Polimorfismo en Java para lo cual te voy a pedir de favor que si no estas familiarizado con los temas, hagas clic en los enlaces para que puedas revisar los artículos y comprender mejor los conceptos que te daré a continuación.
 
Una vez dicho lo anterior, es importante aclarar también que el concepto de "herencia múltiple" no es una característica soportada por Java como tal, es decir, una clase derivada no puede heredar al mismo tiempo de 2 clases base, aunque yo misma he probado que si la herencia viene de una "clase abuelo", es decir que una clase derivada herede de una clase base y que esta clase base a su vez sea derivada de otra, entonces si es posible que se realice la herencia, sin embargo la desventaja que yo veo en esto es que puede llegar a generarse un código bastante más engorroso y por lo tanto puede aumentar la complejidad del código. En el siguiente ejemplo se ilustra la definición anterior:
 
Herencia múltiple NO
Figura 1. Una clase derivada no puede tener dos clases base.

Herencia múltiple SI
Figura 2. Una clase derivada puede heredar de una clase "abuelo", ya que se cumple que cada clase derivada posee solo una clase base, aunque esto no es recomendable realizarlo por el grado de complejidad que ocasionaría.
 
Para evitar el famoso código espagueti debemos utilizar las Interfaces en Java, que son archivos que permiten simular una "herencia múltiple" hacia una clase derivada específica, evitando pasar por toda una línea de herencia como en la figura 2. Las características de una Interface son:
  1. No tienen constructor.
  2. Se manda llamar a una o más clases con la palabra reservada implements.
  3. Pueden ser utilizadas junto con extends (Herencia) pero no es forzoso.
  4. Los atributos que se definan en ella se heredarán como CONSTANTES y se deben de escribir con mayúscula y con un valor previamente inicializado.
  5. Los métodos que se definan en ella serán solo prototipos de función, el cuerpo de la misma será implementados en la clase la cual haya mandado llamar con implements.
El siguiente es un ejemplo de como podemos realizar la implementación en las clase Gato usando la clase base Animal y la implementación Felino:

Diagrama UML 

Figura 3. Diagrama UML - Implementación en Java.

 Código en Java

Clase Animal

package interfaces;

public class Animal
{

protected String nombre;
protected String raza;
protected String color;
protected String tamano;

public Animal(String nombre, String raza, String color, String tamano)
{
this.nombre=nombre;
this.raza=raza;
this.color=color;
this.tamano=tamano;
}

public void imprimeDatos()
{
System.out.println("El nombre es: "+nombre);
System.out.println("La raza es: "+raza);
System.out.println("El color es: "+color);
System.out.println("El tamaño es: "+tamano);
}

}

Implementación Felino

package interfaces;

public interface Felino
{

public String TIPO="Terrestre";
public void imprimeInformacion();

}
 

Clase Gato

package interfaces;

public class Gato extends Animal implements Felino
{

private final String marca_arena;
public Gato(String nombre, String raza, String color, String tamano, String marca_arena)
{
super(nombre, raza, color, tamano);
this.marca_arena=marca_arena;
}


public void imprimeMarcaArena()
{
System.out.println("Mi marca favorita de arena es: "+marca_arena);
}


@Override
public void imprimeInformacion()
{
System.out.println("Soy un gato, soy de tipo "+TIPO);
}

}
También se debe de codificar la clase main llamada Interfaces que permitirá la ejecución del programa.

Clase Interfaces

public class Interfaces {

/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
Gato g=new Gato("Bolita de Nieve","Persa","Blanco","Peque","Pulcrogato");
g.imprimeDatos();
g.imprimeInformacion();
g.imprimeMarcaArena();
}

}
En resumen, las interfaces son una buena opción para simular la "herencia múltiple" en Java y heredar atributos y métodos con las características descritas solo a determinadas clases, no es necesario aplicarla en todas las clases de nuestro paquete.

En el siguiente video te explico un poco más a detalle el ejemplo anterior y su codificación paso a paso.

No te olvides darle LIKE y SUSCRIBIRTE al blog y a mi canal si te gustó el video. Si gustas realizar una DONACIÓN para ayudarme a mejorar el canal y mi contenido, puedes hacerlo mediante el botón ❤$GRACIAS ubicado en la parte posterior del video en YouTube o visitando el enlace https://linktr.ee/ezavalar y haciendo clic en el botón Donaciones.

Comentarios

Seguidores del blog

Suscríbete al blog

Recibe mis nuevas publicaciones por email: