13.12 Herança e Polimorfismo em Java: Interfaces

No mundo da programação orientada a objetos (POO), a herança e o polimorfismo são dois conceitos fundamentais que permitem a criação de códigos mais organizados, reutilizáveis e fáceis de manter. Em Java, esses conceitos são implementados através de classes e interfaces, que juntas fornecem uma estrutura poderosa para o desenvolvimento de software. Neste capítulo, vamos explorar como as interfaces em Java permitem a implementação de herança e polimorfismo, e como você pode usá-las para criar programas mais flexíveis e extensíveis.

O que são Interfaces?

Uma interface em Java é um tipo de referência semelhante a uma classe, que pode conter constantes e métodos abstratos. Ao contrário das classes, as interfaces não podem conter implementações de métodos (exceto métodos padrão e estáticos a partir do Java 8) e não podem ser instanciadas. Elas são usadas para definir um contrato que as classes devem seguir, ou seja, um conjunto de métodos que as classes devem implementar.

As interfaces são particularmente úteis quando você quer garantir que diferentes classes implementem a mesma funcionalidade, mas de maneiras potencialmente diferentes. Isso é parte do que chamamos de polimorfismo, onde um único tipo de interface pode se referir a várias formas de implementações.

Herança através de Interfaces

Em Java, uma classe pode herdar de apenas uma classe pai (superclasse), mas pode implementar várias interfaces. Essa é uma forma de herança múltipla de tipo, que permite que uma classe seja vista como vários tipos diferentes e, portanto, possa ser usada de maneiras diferentes. A herança de interfaces é feita através da palavra-chave implements, e uma classe que implementa uma interface deve fornecer implementações concretas para todos os seus métodos abstratos.

Exemplo de Interface


public interface Veiculo {
    void acelerar(int incremento);
    void frear(int decremento);
}
  

No exemplo acima, a interface Veiculo define dois métodos abstratos: acelerar e frear. Qualquer classe que implementa Veiculo deve fornecer implementações para esses métodos.

Implementando Interfaces


public class Carro implements Veiculo {
    private int velocidade;

    @Override
    public void acelerar(int incremento) {
        velocidade += incremento;
    }

    @Override
    public void frear(int decremento) {
        velocidade -= decremento;
    }
}
  

A classe Carro implementa a interface Veiculo e fornece implementações concretas dos métodos acelerar e frear. Note que usamos a anotação @Override para indicar que estamos sobrescrevendo métodos da interface.

Polimorfismo com Interfaces

O polimorfismo é a capacidade de um objeto ser referenciado de várias formas. Em Java, isso é frequentemente realizado através de interfaces. Por exemplo, se tivermos outra classe, como Bicicleta, que também implementa a interface Veiculo, podemos referenciar tanto objetos do tipo Carro quanto Bicicleta através de uma referência de tipo Veiculo.


Veiculo meuVeiculo;
meuVeiculo = new Carro();
meuVeiculo.acelerar(10);
meuVeiculo = new Bicicleta();
meuVeiculo.acelerar(3);
  

No exemplo acima, a variável meuVeiculo é do tipo interface Veiculo. Inicialmente, ela referencia um objeto do tipo Carro e depois um objeto do tipo Bicicleta. Em ambos os casos, podemos chamar o método acelerar sem nos preocuparmos com o tipo específico do objeto.

Benefícios das Interfaces

As interfaces trazem diversos benefícios para o desenvolvimento de software em Java:

  • Contrato claro: As interfaces definem um conjunto claro de métodos que devem ser implementados, facilitando a compreensão de como as classes devem ser usadas.
  • Desacoplamento: Como as interfaces são abstrações, elas permitem que você escreva código que não depende de implementações específicas, tornando seu código mais flexível e fácil de modificar.
  • Testabilidade: Interfaces facilitam a criação de mock objects para testes, já que você pode criar implementações falsas que seguem o contrato da interface.
  • Extensibilidade: Novas classes podem ser facilmente adicionadas ao sistema, desde que implementem as interfaces necessárias, sem alterar o código existente.

Conclusão

Herança e polimorfismo são conceitos chave na POO e, em Java, as interfaces desempenham um papel crucial na implementação desses conceitos. Elas permitem a criação de código flexível e reutilizável, facilitam a manutenção e a extensão de sistemas e promovem boas práticas de design de software. Ao dominar o uso de interfaces, você estará equipado para criar programas robustos e adaptáveis que podem crescer e evoluir com facilidade.

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 Herança e Polimorfismo em Java: Classes Internas e Herança

Próxima página do Ebook Gratuito:

97Herança e Polimorfismo em Java: Classes Internas e Herança

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