Menu
Coddy logo textTech

Introdução às Interfaces

Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy — lição 34 de 87.

Você viu como classes abstratas definem contratos que as subclasses devem seguir. Mas e se você quiser que uma classe siga múltiplos contratos? O Java não permite que uma classe estenda múltiplas classes, mas resolve esse problema com interfaces.

Uma interface é um contrato que define o que uma classe pode fazer, sem especificar como ela faz isso. Ao contrário das classes abstratas, as interfaces contêm apenas assinaturas de métodos (por padrão) sem implementação:

public interface Drawable {
    void draw();
}

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

Pense em uma interface como uma promessa. Quando uma classe implementa uma interface, ela promete fornecer implementações para todos os métodos declarados nessa interface. A interface define a capacidade, e a classe fornece o comportamento.

Interfaces são declaradas usando a palavra-chave interface em vez de class. Todos os métodos em uma interface são implicitamente public e abstract, então você não precisa escrever essas palavras-chave:

public interface Playable {
    void play();    // implicitamente public abstract
    void pause();
    void stop();
}

Interfaces também podem declarar constantes, que são implicitamente public static final:

public interface GameConstants {
    int MAX_PLAYERS = 4;  // implicitamente public static final
}

Na próxima lição, você aprenderá como as classes implementam interfaces usando a palavra-chave implements.

challenge icon

Desafio

Fácil

Vamos construir um sistema de controle de dispositivos definindo interfaces que descrevem o que diferentes dispositivos podem fazer. Este desafio foca na criação de interfaces — os contratos que definem capacidades sem especificar como elas funcionam.

Você organizará seu código em três arquivos:

  • Switchable.java: Crie uma interface que defina o que significa para um dispositivo ser comutável (switchable). Qualquer dispositivo comutável deve ser capaz de ligar e desligar. Declare dois métodos: turnOn() e turnOff(). Lembre-se, os métodos de interface são implicitamente públicos e abstratos, então você só precisa das assinaturas dos métodos.
  • Adjustable.java: Crie outra interface que defina o que significa para um dispositivo ser ajustável. Um dispositivo ajustável deve ser capaz de definir seu nível. Declare um método setLevel(int level). Também inclua uma constante MAX_LEVEL com o valor 100 — lembre-se que as constantes em interfaces são implicitamente public static final.
  • Main.java: Demonstre que suas interfaces estão devidamente definidas imprimindo informações sobre elas. Você receberá uma entrada: um valor de nível (int). Imprima as três linhas a seguir:
    • Switchable methods: turnOn, turnOff
    • Adjustable methods: setLevel
    • Max level constant: [MAX_LEVEL value] (acesse a constante a partir da interface Adjustable)
    Depois imprima: Setting level to: [input level]

Você receberá uma entrada: um valor de nível (int).

Este desafio foca puramente na definição de interfaces — os projetos que descrevem capacidades. Na próxima lição, você aprenderá como as classes realmente implementam essas interfaces para fornecer o comportamento real!

Folha de consulta

Uma interface é um contrato que define o que uma classe pode fazer, sem especificar como ela faz. Interfaces contêm apenas assinaturas de métodos sem implementação.

Interfaces são declaradas usando a palavra-chave interface:

public interface Drawable {
    void draw();
}

Todos os métodos em uma interface são implicitamente public e abstract:

public interface Playable {
    void play();    // implicitamente public abstract
    void pause();
    void stop();
}

Interfaces podem declarar constantes, que são implicitamente public static final:

public interface GameConstants {
    int MAX_PLAYERS = 4;  // implicitamente public static final
}

Uma classe pode implementar múltiplas interfaces, ao contrário de estender múltiplas classes.

Experimente você mesmo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int level = scanner.nextInt();
        
        // TODO: Imprima informações sobre as interfaces
        // Imprima: "Switchable methods: turnOn, turnOff"
        // Imprima: "Adjustable methods: setLevel"
        // Imprima: "Max level constant: " seguido por Adjustable.MAX_LEVEL
        // Imprima: "Setting level to: " seguido pelo nível de entrada
        
    }
}
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