Dominada as Classes Abstratas, vamos dar um passo adiante com as Interfaces. Elas são um conceito fundamental na Programação Orientada a Objetos, especialmente em Java, e nos permitem definir "contratos" de comportamento que as classes devem seguir, garantindo um design de software ainda mais flexível e desacoplado.



🤔 O Que São Interfaces?

Imagine que você está em um restaurante. O menu é como um contrato. Ele diz o que o restaurante (a classe) pode "fazer" (os métodos) para você, como "servir prato principal", "servir sobremesa", "fazer a conta". O menu não diz como o chef vai preparar o prato ou como a conta será calculada, apenas que essas ações estão disponíveis.

Uma Interface em Java é exatamente isso: um contrato 100% abstrato. Ela define um conjunto de métodos abstratos que uma classe deve implementar. Ao contrário de uma classe abstrata, uma interface não pode ter nenhuma implementação de método (até o Java 8, onde métodos default e static foram introduzidos, mas vamos focar no conceito fundamental primeiro). Ela apenas declara "o quê" uma classe deve fazer, mas nunca "como" ela deve fazer.


❓Por Que Usar Interfaces? ❓

Motivos:


Componentes de uma Interface

Uma interface pode conter:

  1. Métodos Abstratos (implicitamente public abstract): São os métodos que a classe que implementa a interface deve fornecer uma implementação. Por padrão, todos os métodos em uma interface são public e abstract, mesmo que você não declare explicitamente.
  2. Constantes (implicitamente public static final): Você pode definir constantes em uma interface. Elas são automaticamente public, static e final.

🧪 Exemplo Prático: Animais que Podem Voar 🧪

Vamos pensar em animais. Alguns podem voar, outros não. Um Pato e um Avião (mesmo não sendo um animal, mas pensando em classes) podem ter o comportamento de "voar". Pinguim não voa. A capacidade de voar é um comportamento que pode ser aplicado a diferentes tipos de objetos, e é um caso perfeito para uma interface.

// Declaração de uma Interface
public interface Voador { // Note a palavra-chave 'interface'

    // Método abstrato: Define o comportamento de voar
    // É implicitamente public abstract void voar();
    void voar();

    // Outro método abstrato: Define a altura máxima de voo
    double getAlturaMaximaVoo();

    // Exemplo de constante em uma interface
    String TIPO_VOO = "Atmosférico"; // Implicitamente public static final String TIPO_VOO = "Atmosférico";
}

Neste exemplo:


Implementando Interfaces: Dando Vida ao Contrato