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, onde você só pode estender apenas uma classe, o Java permite que uma classe implemente múltiplas interfaces. É assim que o Java alcança uma forma de herança múltipla com segurança.

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 ela declara. Você também pode combinar herança com múltiplas 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ê projete classes que desempenham múltiplos papéis. Um SmartPhone poderia implementar as interfaces Callable, Messageable e Browsable, cada uma definindo diferentes capacidades que o telefone suporta.

challenge icon

Desafio

Fácil

Vamos construir um sistema de dispositivos inteligentes onde os dispositivos podem ter múltiplas capacidades. Você criará uma SmartTV que pode ser ligada/desligada e ter seu volume controlado — demonstrando como uma única classe pode implementar múltiplas interfaces para cumprir diferentes papéis.

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 necessá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 múltiplas 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 do volume (int).

Sua saída deve mostrar quatro linhas demonstrando como sua SmartTV cumpre ambos os contratos de interface — ela pode ser ligada como qualquer dispositivo Powerable e ter seu volume controlado como qualquer dispositivo VolumeControl!

Folha de consulta

Uma classe pode implementar múltiplas interfaces listando-as após a palavra-chave implements, separadas por vírgulas:

public class Rectangle implements Drawable, Resizable {
    // Deve implementar todos os métodos de ambas as interfaces
}

A classe deve implementar todos os métodos de cada interface que ela declara.

Você também pode combinar a herança de classe com a implementação de múltiplas interfaces:

public class Square extends Shape implements Drawable, Resizable {
    // Implementa métodos de ambas as interfaces
    // Pode usar membros herdados de Shape
}

Isso permite que uma classe desempenhe múltiplos papéis e tenha diferentes capacidades.

Experimente você mesmo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Ler as entradas
        String brand = scanner.nextLine();
        int volumeLevel = scanner.nextInt();
        
        // TODO: Criar uma SmartTV com a marca fornecida
        
        // TODO: Chamar powerOn()
        
        // TODO: Chamar setVolume() com o nível fornecido
        
        // TODO: Imprimir: Current volume: [volume] usando getVolume()
        
        // TODO: Chamar 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