Menu
Coddy logo textTech

Introducción a las Interfaces

Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy — lección 34 de 87.

Has visto cómo las clases abstractas definen contratos que las subclases deben seguir. Pero, ¿qué pasa si quieres que una clase siga múltiples contratos? Java no permite que una clase extienda múltiples clases, pero resuelve este problema con interfaces.

Una interfaz es un contrato que define lo que una clase puede hacer, sin especificar cómo lo hace. A diferencia de las clases abstractas, las interfaces contienen solo firmas de métodos (por defecto) sin implementación:

public interface Drawable {
    void draw();
}

public interface Resizable {
    void resize(int width, int height);
}

Piense en una interfaz como una promesa. Cuando una clase implementa una interfaz, promete proporcionar implementaciones para todos los métodos declarados en esa interfaz. La interfaz define la capacidad, y la clase proporciona el comportamiento.

Las interfaces se declaran utilizando la palabra clave interface en lugar de class. Todos los métodos en una interfaz son implícitamente public y abstract, por lo que no es necesario escribir esas palabras clave:

public interface Playable {
    void play();    // implícitamente public abstract
    void pause();
    void stop();
}

Las interfaces también pueden declarar constantes, que son implícitamente public static final:

public interface GameConstants {
    int MAX_PLAYERS = 4;  // implícitamente public static final
}

En la siguiente lección, aprenderás cómo las clases implementan interfaces utilizando la palabra clave implements.

challenge icon

Desafío

Fácil

Vamos a construir un sistema de control de dispositivos definiendo interfaces que describan lo que pueden hacer diferentes dispositivos. Este desafío se centra en la creación de interfaces: los contratos que definen capacidades sin especificar cómo funcionan.

Organizarás tu código en tres archivos:

  • Switchable.java: Crea una interfaz que defina lo que significa que un dispositivo sea conmutable. Cualquier dispositivo conmutable debe poder encenderse y apagarse. Declara dos métodos: turnOn() y turnOff(). Recuerda que los métodos de interfaz son implícitamente públicos y abstractos, por lo que solo necesitas las firmas de los métodos.
  • Adjustable.java: Crea otra interfaz que defina lo que significa que un dispositivo sea ajustable. Un dispositivo ajustable debe poder establecer su nivel. Declara un método setLevel(int level). También incluye una constante MAX_LEVEL con un valor de 100; recuerda que las constantes en las interfaces son implícitamente public static final.
  • Main.java: Demuestra que tus interfaces están correctamente definidas imprimiendo información sobre ellas. Recibirás una entrada: un valor de nivel (int). Imprime las siguientes tres líneas:
    • Switchable methods: turnOn, turnOff
    • Adjustable methods: setLevel
    • Max level constant: [MAX_LEVEL value] (accede a la constante desde la interfaz Adjustable)
    Luego imprime: Setting level to: [input level]

Recibirás una entrada: un valor de nivel (int).

Este desafío se centra puramente en la definición de interfaces: los planos que describen las capacidades. ¡En la próxima lección, aprenderás cómo las clases implementan realmente estas interfaces para proporcionar el comportamiento real!

Hoja de referencia

Una interfaz es un contrato que define lo que una clase puede hacer, sin especificar cómo lo hace. Las interfaces contienen solo firmas de métodos sin implementación.

Las interfaces se declaran utilizando la palabra clave interface:

public interface Drawable {
    void draw();
}

Todos los métodos en una interfaz son implícitamente public y abstract:

public interface Playable {
    void play();    // implícitamente public abstract
    void pause();
    void stop();
}

Las interfaces pueden declarar constantes, las cuales son implícitamente public static final:

public interface GameConstants {
    int MAX_PLAYERS = 4;  // implícitamente public static final
}

Una clase puede implementar múltiples interfaces, a diferencia de extender múltiples clases.

Pruébalo tú mismo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int level = scanner.nextInt();
        
        // TODO: Imprimir información sobre las interfaces
        // Imprimir: "Switchable methods: turnOn, turnOff"
        // Imprimir: "Adjustable methods: setLevel"
        // Imprimir: "Max level constant: " seguido de Adjustable.MAX_LEVEL
        // Imprimir: "Setting level to: " seguido del nivel de entrada
        
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos