interfacesinterfaces

Durante o estudo da Programação Orientada a Objetos (POO), aprendemos que uma classe pode herdar características de outra utilizando herança e que o polimorfismo permite que objetos diferentes respondam ao mesmo método de maneiras distintas.

Mas existe outra ferramenta extremamente importante na linguagem Java: as interfaces.

As interfaces permitem criar sistemas mais organizados, desacoplados e fáceis de expandir.

Neste artigo, você aprenderá o que são interfaces, quando utilizá-las e como elas funcionam na prática.


O que é uma Interface?

Uma interface pode ser entendida como um contrato.

Ela define quais métodos uma classe deve possuir, mas normalmente não informa como esses métodos serão implementados.

Pense em uma tomada elétrica.

Ela define um padrão de conexão.

Qualquer aparelho que siga esse padrão poderá ser conectado, independentemente de ser:

  • uma televisão;
  • um computador;
  • um carregador de celular;
  • uma impressora.

Cada equipamento funciona de maneira diferente, mas todos utilizam o mesmo padrão de conexão.

Em Java, uma interface funciona exatamente dessa forma.


Declarando uma Interface

Uma interface é criada utilizando a palavra-chave interface.

Exemplo:

public interface Animal {

    void emitirSom();

}

Observe que não existe implementação do método.

A interface apenas informa que qualquer classe que a implemente deverá possuir esse método.


Implementando uma Interface

Para utilizar uma interface, empregamos a palavra-chave implements.

Exemplo:

public class Cachorro implements Animal {

    @Override
    public void emitirSom() {
        System.out.println("Au Au!");
    }

}

Outra implementação:

public class Gato implements Animal {

    @Override
    public void emitirSom() {
        System.out.println("Miau!");
    }

}

Perceba que ambas as classes implementam exatamente o mesmo método.

Entretanto, cada uma possui seu próprio comportamento.


Utilizando o Polimorfismo

Uma das maiores vantagens das interfaces aparece quando utilizamos polimorfismo.

Animal animal;

animal = new Cachorro();
animal.emitirSom();

animal = new Gato();
animal.emitirSom();

Saída:

Au Au!
Miau!

A variável continua sendo do tipo Animal.

Quem muda é o objeto armazenado nela.


Outro exemplo: Sistema de Pagamentos

Imagine um sistema de vendas.

O cliente pode pagar utilizando:

  • PIX;
  • Cartão;
  • Boleto.

Todos realizam um pagamento.

Então podemos criar uma interface.

public interface Pagamento {

    void pagar(double valor);

}

Implementação do PIX:

public class Pix implements Pagamento {

    @Override
    public void pagar(double valor) {

        System.out.println("Pagamento de R$ " + valor + " via PIX.");

    }

}

Implementação do Cartão:

public class Cartao implements Pagamento {

    @Override
    public void pagar(double valor) {

        System.out.println("Pagamento de R$ " + valor + " via Cartão.");

    }

}

Agora podemos utilizar qualquer forma de pagamento.

Pagamento pagamento;

pagamento = new Pix();
pagamento.pagar(200);

pagamento = new Cartao();
pagamento.pagar(350);

O restante do programa continua exatamente igual.


Interfaces permitem múltiplas implementações

Uma classe pode herdar apenas uma classe.

Por exemplo:

public class Cachorro extends Animal

Não é possível fazer:

public class Cachorro extends Animal, Mamifero

O Java não permite herança múltipla de classes.

Por outro lado, uma classe pode implementar várias interfaces.

Exemplo:

public interface Voador {

    void voar();

}
public interface Nadador {

    void nadar();

}

Agora uma classe pode implementar ambas.

public class Pato implements Voador, Nadador {

    @Override
    public void voar() {

        System.out.println("O pato está voando.");

    }

    @Override
    public void nadar() {

        System.out.println("O pato está nadando.");

    }

}

Essa é uma das principais vantagens das interfaces.


Interface x Classe Abstrata

Esses dois conceitos costumam gerar dúvidas.

Embora sejam parecidos, possuem objetivos diferentes.

Classe AbstrataInterface
Pode possuir atributosNão possui atributos de instância (como regra de projeto)
Pode possuir métodos implementadosDefine principalmente comportamentos
Utiliza extendsUtiliza implements
Pode possuir construtorNão possui construtor
Uma classe só pode herdar umaUma classe pode implementar várias

Quando utilizar uma Interface?

Uma interface é indicada quando várias classes possuem um mesmo comportamento, mas implementam esse comportamento de maneiras diferentes.

Exemplos:

  • Pagamento
  • Impressão
  • Login
  • Autenticação
  • Exportação de arquivos
  • Envio de mensagens
  • Conexão com banco de dados

Cada implementação executa a mesma tarefa de forma diferente.


Vantagens das Interfaces

As interfaces oferecem diversos benefícios para o desenvolvimento de software.

  • Favorecem o polimorfismo.
  • Reduzem o acoplamento entre as classes.
  • Facilitam a manutenção do código.
  • Tornam o sistema mais flexível.
  • Permitem substituir implementações sem alterar o restante do programa.
  • Facilitam a realização de testes automatizados.
  • São amplamente utilizadas em grandes projetos Java.

Exemplo prático

Imagine um sistema de notificações.

Você pode criar uma interface.

public interface Notificacao {

    void enviar(String mensagem);

}

Depois criar várias implementações.

  • Email
  • SMS
  • WhatsApp
  • Push Notification

Todas enviam mensagens, mas cada uma faz isso de maneira diferente.

O restante do sistema apenas chama:

notificacao.enviar("Pedido aprovado!");

Não importa qual implementação está sendo utilizada.


Exercício

Crie uma interface chamada Veiculo contendo os métodos:

void acelerar();
void frear();

Depois implemente essa interface nas classes:

  • Carro
  • Moto
  • Bicicleta

No programa principal, crie um vetor de Veiculo e percorra todos os objetos chamando:

veiculo.acelerar();
veiculo.frear();

Observe que cada classe executará esses métodos de maneira diferente.


Conclusão

As interfaces são um dos recursos mais importantes da Programação Orientada a Objetos em Java.

Elas permitem definir contratos entre as classes, favorecem o polimorfismo, reduzem o acoplamento e tornam o software mais organizado e preparado para futuras mudanças.

Em projetos profissionais, é muito comum encontrar sistemas que utilizam interfaces em praticamente todos os módulos, justamente porque elas tornam o código mais reutilizável, flexível e fácil de manter.

Dominar interfaces é um passo fundamental para evoluir como desenvolvedor Java e compreender frameworks amplamente utilizados, como Spring Boot, Jakarta EE e Hibernate.

By Infodiversao

Adoro tecnologia e informação. Gosto de jogos eletrônicos e de esportes. Desejo que todos tenham uma ótima vida!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *