Saltar al contenido principal
eLearner.app
Módulo 4 · Lección 1 de 27/14 en el curso~15 min
Lecciones del módulo (1/2)

Interfaces

Mientras que las clases abstractas pueden contener tanto código parcialmente implementado como campos de instancia, las interfaces en Java son contratos de puro comportamiento. Una interfaz define qué debe saber hacer una clase, pero no cómo lo hace.

Esto permite un desacoplamiento total entre la definición de las operaciones y su implementación real.

Definir una Interfaz (interface)

Se utiliza la palabra clave interface. Todos los métodos declarados en una interfaz son implícitamente public y abstract (no es necesario especificarlo):

Code
interface Drivable {
    void startEngine();
    void stopEngine();
}

Implementar una Interfaz (implements)

Una clase implementa una interfaz usando la palabra clave implements y está obligada a proporcionar la implementación (con el cuerpo) para todos los métodos definidos:

Code
class Motorcycle implements Drivable {
    @Override
    public void startEngine() {
        System.out.println("Rombo del motore acceso!");
    }

    @Override
    public void stopEngine() {
        System.out.println("Motore spento.");
    }
}

Ventajas de las Interfaces

  1. Herencia Múltiple: En Java, una clase puede extender solo una clase padre (herencia simple), pero puede implementar múltiples interfaces al mismo tiempo.
    Code
    class HybridCar implements Drivable, Chargeable { ... }
    
  2. Desacoplamiento: Puedes definir variables usando el tipo de la interfaz. Cualquier objeto que implemente esa interfaz puede asignarse a dicha variable.
    Code
    Drivable vehicle = new Motorcycle();
    vehicle.startEngine();
    

Constantes en las Interfaces

En las interfaces es posible declarar campos. Estos campos son implícitamente public static final (es decir, constantes de clase), incluso si no se especifican estos modificadores. Por lo tanto, deben inicializarse inmediatamente en el momento de la declaración:

Code
interface PhysicsConstants {
    double GRAVITY = 9.81; // Implicitamente public static final
}

Métodos por Defecto (default)

A partir de Java 8, es posible definir métodos con una implementación por defecto dentro de una interfaz utilizando la palabra clave default. Estos métodos no obligan a las clases que implementan la interfaz a sobrescribirlos, proporcionando un comportamiento de respaldo:

Code
interface Logger {
    void log(String message);

    // Metodo di default con corpo
    default void logError(String message) {
        log("ERRORE: " + message);
    }
}

Pruébalo tú

Ejercicio#java.m4.l1.e1
Intentos: 0Cargando...

Crea la interfaz Flyable con el método void fly(). Luego implementa la clase Bird para que implemente Flyable y muestre Flying en pantalla.

Cargando editor...
Mostrar pista

En Flyable escribe `void fly();`. En la clase Bird implementa el método marcándolo con `@Override public void fly() { System.out.println('Flying'); }`.

Solución disponible después de 3 intentos

Ejercicio#java.m4.l1.e2
Intentos: 0Cargando...

Define la interfaz Drawable con el método void draw(). Luego implementa la clase Rectangle para que implemente Drawable y muestre Drawing Rectangle.

Cargando editor...
Mostrar pista

Define `void draw();` en la interfaz. En Rectangle usa `@Override public void draw() { System.out.println('Drawing Rectangle'); }`.

Solución disponible después de 3 intentos

Ejercicio#java.m4.l1.e3
Intentos: 0Cargando...

Completa la interfaz Swimmable definiendo el método void swim(). Luego completa la clase Duck para que implemente tanto Flyable como Swimmable, mostrando Flying en el método fly() y Swimming en el método swim().

Cargando editor...
Mostrar pista

Declara `void swim();` en Swimmable. Declara `class Duck implements Flyable, Swimmable` e implementa ambos métodos imprimiendo las cadenas requeridas.

Solución disponible después de 3 intentos