Interfaces em Java são um recurso fundamental que permite definir um contrato que as classes podem implementar. Elas são uma forma de alcançar a abstração em Java, e são cruciais para o design de software, especialmente quando se trata de grandes sistemas e frameworks. Ao aprender Java, compreender interfaces é essencial para avançar para programação de nível intermediário e avançado.

Conceito de Interface

Uma interface é uma coleção de métodos abstratos e constantes estáticas. Métodos abstratos são aqueles que são declarados sem uma implementação. Quando uma classe implementa uma interface, ela deve fornecer implementações concretas para todos os métodos abstratos declarados na interface. Isso garante que a classe segue o "contrato" estabelecido pela interface.

Declaração de Interface

Para declarar uma interface em Java, você usa a palavra-chave interface. Aqui está um exemplo simples:

public interface Vehicle {
    int MAX_SPEED = 120; // constante estática
    void start(); // método abstrato
    void stop(); // método abstrato
    void accelerate(int speed); // método abstrato
}

Note que os métodos dentro de uma interface são implicitamente públicos e abstratos, então você não precisa especificar esses modificadores. As constantes são public, static e final por definição.

Implementando Interfaces

Quando uma classe implementa uma interface, ela usa a palavra-chave implements. Aqui está um exemplo de uma classe que implementa a interface Vehicle:

public class Car implements Vehicle {
    public void start() {
        // implementação do método start
    }
    
    public void stop() {
        // implementação do método stop
    }
    
    public void accelerate(int speed) {
        // implementação do método accelerate
    }
}

Se uma classe não fornecer implementações para todos os métodos abstratos da interface, ela deve ser declarada como abstrata.

Interfaces e Herança

Uma das grandes vantagens das interfaces é que elas podem ser usadas para simular herança múltipla, algo que não é possível com classes em Java. Uma classe pode implementar várias interfaces, separando-as com vírgulas:

public class ElectricCar implements Vehicle, EcoFriendly {
    // implementação dos métodos de Vehicle e EcoFriendly
}

Isso permite que a classe ElectricCar tenha comportamentos definidos por múltiplas interfaces.

Default Methods

A partir do Java 8, interfaces podem ter métodos default, que têm uma implementação padrão. Isso permite que novos métodos sejam adicionados a interfaces sem quebrar as classes que as implementam. Por exemplo:

public interface Vehicle {
    // métodos abstratos
    
    default void turnAlarmOn() {
        // implementação padrão do método turnAlarmOn
    }
    
    default void turnAlarmOff() {
        // implementação padrão do método turnAlarmOff
    }
}

Classes que implementam a interface Vehicle podem optar por usar essas implementações padrão ou fornecer suas próprias.

Static Methods

Interfaces também podem ter métodos estáticos. Estes são métodos que podem ser chamados no nome da interface, sem a necessidade de uma instância:

public interface Vehicle {
    // métodos abstratos e default
    
    static String getVehicleType() {
        return "Unknown Vehicle Type";
    }
}

Este método pode ser chamado assim: String type = Vehicle.getVehicleType();

Functional Interfaces

Uma interface funcional é uma interface que contém exatamente um método abstrato. Elas são usadas como base para expressões lambda e referências de método. O Java 8 introduziu a anotação @FunctionalInterface para indicar que uma interface é destinada a ser uma interface funcional:

@FunctionalInterface
public interface SimpleFunctionalInterface {
    void execute();
}

Essa anotação não é obrigatória, mas ajuda a garantir que a interface mantenha apenas um método abstrato.

Conclusão

Interfaces são uma peça fundamental na programação Java, permitindo a criação de contratos robustos, promovendo a abstração e facilitando a manutenção e a expansão do código. Ao implementar interfaces, as classes podem se tornar mais modulares e intercambiáveis, o que é uma vantagem significativa em design de software. Aprender a usar interfaces corretamente é um passo essencial para se tornar um programador Java competente e está no cerne de muitos padrões de design avançados em programação orientada a objetos.

Agora responda o exercício sobre o conteúdo:

_Qual das seguintes afirmações sobre interfaces em Java é correta?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Imagem do artigo Sintaxe básica de Java: Tratamento de Exceções (try, catch, finally, throw, throws)

Próxima página do Ebook Gratuito:

17Sintaxe básica de Java: Tratamento de Exceções (try, catch, finally, throw, throws)

4 minutos

Ganhe seu Certificado deste Curso Gratuitamente! ao baixar o aplicativo Cursa e ler o ebook por lá. Disponível na Google Play ou App Store!

Disponível no Google Play Disponível no App Store

+ de 6,5 milhões
de alunos

Certificado Gratuito e
Válido em todo o Brasil

48 mil exercícios
gratuitos

4,8/5 classificação
nas lojas de apps

Cursos gratuitos em
vídeo, áudio e texto