Publicado em

Interfaces em Java

Partilhar:

Introdução

Interfaces são uma parte crucial da programação orientada a objetos em Java. Elas fornecem uma estrutura que garante a consistência e a implementação de métodos essenciais em várias classes.

O Papel das Interfaces

Em Java, as interfaces funcionam como contratos. Elas estabelecem um conjunto de métodos que uma classe deve implementar. Não possuem implementação própria; oferecem apenas a assinatura dos métodos.

Porque usar Interfaces?

  1. Polimorfismo: Interfaces promovem polimorfismo. Qualquer objeto de uma classe que implementa uma interface pode ser referenciado como um objeto da interface.
  2. Flexibilidade: As interfaces tornam o sistema extensível. Elas permitem que o código evolua sem quebrar as classes que já usam interfaces antigas.
  3. Segurança: Estabelecem um contrato rígido que a classe deve seguir, garantindo que certos métodos sejam implementados.

Padrões de Design e Interfaces

Muitos padrões de design em Java utilizam interfaces devido à sua flexibilidade. Por exemplo, o padrão Adapter usa interfaces para compatibilizar interfaces incompatíveis, e o padrão Factory pode usar interfaces para definir um método de criação.

Diferença Entre Interfaces e Classes Abstratas

Enquanto ambas fornecem um meio para forçar classes a seguir um determinado contrato, há diferenças fundamentais:

  • Classes podem implementar múltiplas interfaces, mas só podem herdar de uma classe abstrata.
  • Interfaces não têm variáveis de estado; classes abstratas podem.
  • Métodos de interfaces são, por padrão, public e abstract. Em classes abstratas, você tem maior flexibilidade quanto à visibilidade e implementação.

Exemplificando com Código

As interfaces são usadas para garantir a implementação de certos métodos:

package com.caffeinealgorithm.programaremjava;

public class Interfaces {
  public void Run() {
    var carro = new Carro("Nissan", "Juke", "Dianteira", "Manual", "Gasóleo", 1461, 175, 110, 25070);
    carro.informacao();

    /*
      Marca: Nissan
      Modelo: Juke
      Localização do motor: Dianteira
      Transmissão: Manual
      Combustível: Gasóleo
      Cilindrada: 1461 cc
      Velocidade máxima: 175 km/h
      Potência máxima: 110 cv
      Preço: 25070.00 euros
    */
  }
}

class Carro implements ICarro {
  private String marca, modelo, localizacaoDoMotor, transmissao, combustivel;
  private int cilindrada, velocidadeMaxima, potenciaMaxima;
  private double preco;

  public Carro(String marca, String modelo, String localizacaoDoMotor, String transmissao, String combustivel,
               int cilindrada, int velocidadeMaxima, int potenciaMaxima, double preco) {
    this.marca = marca;
    this.modelo = modelo;
    this.localizacaoDoMotor = localizacaoDoMotor;
    this.transmissao = transmissao;
    this.combustivel = combustivel;
    this.cilindrada = cilindrada;
    this.velocidadeMaxima = velocidadeMaxima;
    this.potenciaMaxima = potenciaMaxima;
    this.preco = preco;
  }

  public void informacao() {
    System.out.printf("Marca: %s\n", marca);
    System.out.printf("Modelo: %s\n", modelo);
    System.out.printf("Localização do motor: %s\n", localizacaoDoMotor);
    System.out.printf("Transmissão: %s\n", transmissao);
    System.out.printf("Combustível: %s\n",combustivel);
    System.out.printf("Cilindrada: %d cc\n", cilindrada);
    System.out.printf("Velocidade máxima: %d km/h\n", velocidadeMaxima);
    System.out.printf("Potência máxima: %d cv\n", potenciaMaxima);
    System.out.printf("Preço: %.2f euros", preco);
  }
}

interface ICarro {
  void informacao();
}

Neste exemplo, a classe Carro implementa a interface ICarro, garantindo a existência do método informacao().

Conclusão

Interfaces em Java são ferramentas essenciais que oferecem muitas vantagens em termos de polimorfismo, flexibilidade e segurança. Elas são fundamentais na construção de sistemas extensíveis e manuteníveis. A capacidade de usar interfaces em conjunto com padrões de design faz delas uma parte inestimável do arsenal de um desenvolvedor Java.

Happy coding!