- Autor
- Nome
- Nelson Silva
- Social
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
- Porque usar Interfaces?
- Padrões de Design e Interfaces
- Diferença Entre Interfaces e Classes Abstratas
- Exemplificando com Código
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?
- Polimorfismo: Interfaces promovem polimorfismo. Qualquer objeto de uma classe que implementa uma interface pode ser referenciado como um objeto da interface.
- Flexibilidade: As interfaces tornam o sistema extensível. Elas permitem que o código evolua sem quebrar as classes que já usam interfaces antigas.
- 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
eabstract
. 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.