Java/Herança e Polimorfismo/Interface e Polimorfismo
Java⏱ ~2 min de leitura

Interface e Polimorfismo

implements, métodos default e polimorfismo

Uma interface define um contrato: uma lista de métodos que qualquer classe que a implement precisa fornecer. Diferente de classes abstratas, uma classe pode implementar múltiplas interfaces, resolvendo o problema da herança múltipla.

Polimorfismo significa "muitas formas" — um mesmo tipo de referência (interface ou superclasse) pode apontar para objetos de subtipos diferentes, e o método correto é chamado em tempo de execução. Isso permite escrever código genérico que funciona com qualquer implementação.

Desde o Java 8, interfaces podem ter métodos default (implementação padrão que as classes herdam) e métodos static. Isso permite evoluir uma interface sem quebrar as implementações existentes.

Exemplo.java
// ── Interface: contrato ───────────────────────────
public interface Animal {
    String fazerSom();  // abstrato: toda classe deve implementar

    // Método default: implementação padrão (Java 8+)
    default void apresentar() {
        System.out.println("Sou " + getClass().getSimpleName()
            + " e faço: " + fazerSom());
    }
}

public interface Treinavel {
    void executarComando(String comando);
}

// ── Implementação múltipla ────────────────────────
class Cachorro implements Animal, Treinavel {
    @Override public String fazerSom() { return "Au!"; }

    @Override
    public void executarComando(String cmd) {
        System.out.println("Cachorro executa: " + cmd);
    }
}

class Gato implements Animal {
    @Override public String fazerSom() { return "Miau!"; }
}

// ── Polimorfismo ──────────────────────────────────
Animal[] animais = { new Cachorro(), new Gato() };
for (Animal a : animais) {
    a.apresentar(); // cada um chama sua própria versão
}
// Sou Cachorro e faço: Au!
// Sou Gato e faço: Miau!
💡 Dica pro

Programe para interfaces, não implementações: List<String> lista = new ArrayList<>(), não ArrayList<String> lista. Isso facilita trocar a implementação sem alterar o resto do código.

Recompensa+40 XP+exercícios