Menu
Coddy logo textTech

Implementação de Múltiplas Interfaces

Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy. Lição 36 de 87.

Ao contrário da herança de classes, na qual você só pode estender uma classe, Java permite que uma classe implemente múltiplas interfaces. É assim que Java alcança uma forma segura de herança múltipla.

Para implementar múltiplas interfaces, liste-as após a palavra-chave implements, separadas por vírgulas:

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;
    }
}

A classe deve implementar todos os métodos de cada interface que declara. Você também pode combinar herança com várias interfaces:

public class Square extends Shape implements Drawable, Resizable {
    // Deve implementar métodos de ambas as interfaces
    // Também pode usar membros herdados de Shape
}

Essa flexibilidade permite que você crie classes que desempenhem várias funções. Um SmartPhone poderia implementar as interfaces Callable, Messageable e Browsable, cada uma definindo diferentes capacidades compatíveis com o telefone.

challenge icon

Desafio

Fácil

Vamos criar um sistema de dispositivos inteligentes em que os dispositivos podem ter várias capacidades. Você criará uma SmartTV que pode ser ligada/desligada e também ter seu volume controlado, demonstrando como uma única classe pode implementar várias interfaces para cumprir diferentes funções.

Você organizará seu código em quatro arquivos:

  • Powerable.java: Defina uma interface para dispositivos que podem ser ligados. Ela deve declarar dois métodos: powerOn() e powerOff(), ambos retornando void.
  • VolumeControl.java: Defina uma interface para dispositivos com controle de volume. Ela deve declarar um método setVolume(int level) que retorna void e um método getVolume() que retorna um int.
  • SmartTV.java: Crie uma classe que implemente as interfaces Powerable e VolumeControl. Sua SmartTV deve ter um campo brand (String), um campo isOn (boolean, inicialmente false) e um campo volume (int, inicialmente 0). Inclua um construtor que receba o nome da marca. Implemente todos os métodos obrigatórios:
    • powerOn() deve definir isOn como true e imprimir: [brand] TV is now ON
    • powerOff() deve definir isOn como false e imprimir: [brand] TV is now OFF
    • setVolume(int level) deve atualizar o volume e imprimir: [brand] TV volume set to [level]
    • getVolume() deve retornar o volume atual
  • Main.java: Reúna tudo para demonstrar a implementação de várias interfaces. Você receberá duas entradas: um nome de marca (String) e um nível de volume (int). Crie uma SmartTV com a marca fornecida e, em seguida:
    • Chame powerOn()
    • Chame setVolume() com o nível fornecido
    • Imprima: Current volume: [volume] usando getVolume()
    • Chame powerOff()

Você receberá duas entradas: a marca da TV (String) e o nível de volume (int).

Sua saída deve mostrar quatro linhas demonstrando como sua SmartTV cumpre os contratos de ambas as interfaces. Ela pode ser ligada como qualquer dispositivo Powerable e ter seu volume controlado como qualquer dispositivo VolumeControl!

REQUIRED OUTPUT FORMAT: [Your translated content here]

Experimente você mesmo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Ler entradas
        String brand = scanner.nextLine();
        int volumeLevel = scanner.nextInt();
        
        // TODO: Crie uma SmartTV com a marca fornecida
        
        // TODO: Chame powerOn()
        
        // TODO: Chame setVolume() com o nível fornecido
        
        // TODO: Print: Current volume: [volume] using getVolume()
        
        // TODO: Chame powerOff()
        
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de Java online