Menu
Coddy logo textTech

Implementación de Múltiples Interfaces

Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy. Lección 36 de 87.

A diferencia de la herencia de clases, en la que solo puedes extender una clase, Java permite que una clase implemente múltiples interfaces. Así es como Java logra una forma de herencia múltiple de manera segura.

Para implementar varias interfaces, enuméralas después de la palabra clave implements, separadas por comas:

public interface Drawable {
    void draw();
}

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

public class Rectangle implements Drawable, Resizable {
    private int width, height;
    
    public Rectangle(int width, int height) {
        this.width = width;
        this.height = height;
    }
    
    @Override
    public void draw() {
        System.out.println("Drawing rectangle " + width + "x" + height);
    }
    
    @Override
    public void resize(int width, int height) {
        this.width = width;
        this.height = height;
    }
}

La clase debe implementar todos los métodos de cada interfaz que declara. También puedes combinar la herencia con varias interfaces:

public class Square extends Shape implements Drawable, Resizable {
    // Debe implementar los métodos de ambas interfaces
    // También puede usar los miembros heredados de Shape
}

Esta flexibilidad te permite diseñar clases que cumplen múltiples roles. Un SmartPhone podría implementar las interfaces Callable, Messageable y Browsable, cada una de las cuales define diferentes capacidades compatibles con el teléfono.

challenge icon

Desafío

Fácil

Construyamos un sistema de dispositivos inteligentes en el que los dispositivos puedan tener varias capacidades. Crearás un SmartTV que pueda encenderse/apagarse y cuyo volumen pueda controlarse: así demostrarás cómo una sola clase puede implementar varias interfaces para cumplir diferentes funciones.

Organizarás tu código en cuatro archivos:

  • Powerable.java: Define una interfaz para dispositivos que puedan encenderse. Debe declarar dos métodos: powerOn() y powerOff(), ambos con retorno void.
  • VolumeControl.java: Define una interfaz para dispositivos con control de volumen. Debe declarar un método setVolume(int level) que retorne void y un método getVolume() que retorne un int.
  • SmartTV.java: Crea una clase que implemente las interfaces Powerable y VolumeControl. Tu SmartTV debe tener un campo brand (String), un campo isOn (boolean, inicialmente false) y un campo volume (int, inicialmente 0). Incluye un constructor que reciba el nombre de la marca. Implementa todos los métodos requeridos:
    • powerOn() debe establecer isOn en true e imprimir: [brand] TV is now ON
    • powerOff() debe establecer isOn en false e imprimir: [brand] TV is now OFF
    • setVolume(int level) debe actualizar el volumen e imprimir: [brand] TV volume set to [level]
    • getVolume() debe devolver el volumen actual
  • Main.java: Reúne todo para demostrar la implementación de varias interfaces. Recibirás dos entradas: un nombre de marca (String) y un nivel de volumen (int). Crea un SmartTV con la marca indicada y, después:
    • Llama a powerOn()
    • Llama a setVolume() con el nivel indicado
    • Imprime: Current volume: [volume] usando getVolume()
    • Llama a powerOff()

Recibirás dos entradas: la marca del TV (String) y el nivel de volumen (int).

Tu salida debe mostrar cuatro líneas que demuestren cómo tu SmartTV cumple ambos contratos de interfaz. ¡Puede encenderse como cualquier dispositivo Powerable y controlar su volumen como cualquier dispositivo VolumeControl!

Pruébalo tú mismo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Leer entradas
        String brand = scanner.nextLine();
        int volumeLevel = scanner.nextInt();
        
        // TODO: Crea un SmartTV con la marca dada
        
        // TODO: Llama a powerOn()
        
        // TODO: Llama a setVolume() con el nivel dado
        
        // TODO: Print: Current volume: [volume] using getVolume()
        
        // TODO: Llama a powerOff()
        
    }
}
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

Practica por tu cuenta: Compilador de Java online