Interfaces en Java: por qué y cómo se usan

Introducción

En la programación orientada a objetos, una interfaz es un mecanismo que permite definir un conjunto de métodos que una clase debe implementar. Las interfaces proporcionan un contrato que las clases pueden seguir, permitiendo la creación de código flexible y mantenible.

En esta sesión aprenderás:

  • Qué es una interfaz en Java.
  • Cómo se declara e implementa.
  • Cuándo y por qué usar interfaces en lugar de herencia tradicional.
  • Ejemplos prácticos de uso.

¿Qué es una interfaz en Java?

Una interfaz en Java es una colección de métodos abstractos (sin implementación) y constantes. Las clases que implementan una interfaz deben proporcionar implementaciones para todos los métodos declarados en ella.

Características principales de una interfaz:

  1. No puede tener atributos de instancia (solo constantes static final).
  2. Los métodos son abstractos por defecto, aunque desde Java 8 pueden tener implementaciones por defecto (default).
  3. No se pueden instanciar directamente (no se pueden crear objetos de una interfaz).
  4. Se pueden implementar múltiples interfaces en una clase, permitiendo una forma de «herencia múltiple».

Ejemplo básico de una interfaz:

interface Vehiculo {
    void arrancar();
    void detener();
}

class Coche implements Vehiculo {
    public void arrancar() {
        System.out.println("El coche está arrancando...");
    }
    public void detener() {
        System.out.println("El coche se ha detenido.");
    }
}

public class Main {
    public static void main(String[] args) {
        Coche miCoche = new Coche();
        miCoche.arrancar();
        miCoche.detener();
    }
}

Salida esperada:

El coche está arrancando...
El coche se ha detenido.


Diferencias entre Interfaces y Herencia

CaracterísticaInterfacesHerencia (extends)
Múltiples implementacionesNo (solo una superclase)
Implementación de métodosNo (hasta Java 8 con default)
Uso de atributosSolo static final (constantes)Puede tener atributos de instancia
Relación«Puedo hacer»«Es un/a»

¿Cuándo usar interfaces?

  • Cuando varias clases deben compartir comportamiento pero no una relación jerárquica.
  • Para definir contratos de comportamiento (Ej: Comparable, Serializable).
  • En diseños flexibles donde una clase debe implementar funcionalidades de varias fuentes.

Ejemplo con Múltiples Interfaces

Una clase puede implementar varias interfaces a la vez, lo que soluciona la falta de herencia múltiple en Java.

interface Volador {
    void volar();
}

interface Nadador {
    void nadar();
}

class Pato implements Volador, Nadador {
    public void volar() {
        System.out.println("El pato está volando.");
    }
    public void nadar() {
        System.out.println("El pato está nadando.");
    }
}

public class Main {
    public static void main(String[] args) {
        Pato miPato = new Pato();
        miPato.volar();
        miPato.nadar();
    }
}

Salida esperada:

El pato está volando.
El pato está nadando.


Interfaces con Métodos default y static

Desde Java 8, las interfaces pueden incluir métodos con implementación usando default o static.

interface Operaciones {
    default void mensaje() {
        System.out.println("Este es un método por defecto en la interfaz");
    }
    static void info() {
        System.out.println("Este es un método estático en la interfaz");
    }
}

class Calculadora implements Operaciones {
    // No es necesario sobrescribir mensaje() porque ya tiene una implementación por defecto
}

public class Main {
    public static void main(String[] args) {
        Calculadora calc = new Calculadora();
        calc.mensaje(); // Llama al método por defecto
        Operaciones.info(); // Llama al método estático
    }
}

Salida esperada:

Este es un método por defecto en la interfaz
Este es un método estático en la interfaz


Ejercicio Propuesto

  1. Crea una interfaz InstrumentoMusical con los métodos tocar() y afinar().
  2. Crea las clases Guitarra y Piano que implementen la interfaz.
  3. En el main, crea instancias de Guitarra y Piano y llama a sus métodos.

Salida esperada:

Afinando la guitarra...
Tocando la guitarra...
Afinando el piano...
Tocando el piano...


Conclusión

  • Una interfaz es un contrato que define comportamientos sin implementarlos.
  • Se usa para permitir múltiples implementaciones en distintas clases.
  • Java permite default y static en interfaces desde la versión 8.
  • Son clave para el diseño modular, desacoplando implementaciones y facilitando la reutilización del código.

Practicar con interfaces te ayudará a escribir código más flexible y escalable. ¡A programar! 🚀


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.