interface ou class?
Esse conceito ainda não ficou bem claro pra mim, mas quando eu uso interface e quando eu uso classe?
Bora lá, realmente não é tão simples distinguir uma interface de uma class.
Interface: É tipo um "contrato".
- A interface define quais recursos um objeto criado a partir de uma classe que a implementa deve oferecer.
- É fundamental para diversos casos, como reduzir a duplicação de código, deixar as classes mais coesas, reutilização de código e etc.
// Exemplo SIMPLES de interface
public interface Animal {
void emitirSom();
void mover();
}
Classe: É na classe que você efetivamente coloca em prática o que foi definido na Interface.
- Também pode conter seus próprios métodos, além dos métodos definidos na Interface.
public class Cachorro implements Animal {
public void emitirSom() {
System.out.println("Latindo");
}
public void mover() {
System.out.println("Correndo");
}
}
- Qualquer classe (como Gato, Papagaio, Cavalo, Porco, etc.) que implementar a interface
Animalserá obrigada a fornecer implementações para os métodosemitirSom()emover(). Isso ocorre porque ela assinou o contrato definido pela interface Animal.
Vamos usar o exemplo das Collections para você entender o uso de Interface X Class. Vou utilizar o exemplo de uma interface List, mas a explicação se aplica para as demais intefaces e suas implementações (Classes).
- Quando você cria uma
List, qual é o seu objetivo? Você está criando um objeto que pode armazenar vários elementos e manter a ordem de inserção desses elementos. Isso é o que você assina como contrato ao instanciar um objeto do tipoList. - No entanto, às vezes, você deseja mais do que apenas os métodos fornecidos pela interface
List. Por exemplo, você pode querer que esse objeto seja Thread Safe para uso em ambientes com várias threads. Nesse caso, você tem a classeVector, que é uma implementação da interfaceListe oferece essa funcionalidade. - Por outro lado, talvez você não precise mais que o objeto seja Thread Safe, mas deseje um desempenho melhor ao pesquisar elementos na lista. Nesse caso, você pode trocar a implementação de
VectorparaLinkedListouArrayList, dependendo dos seus requisitos específicos.
Lembrando que apenas classes concretas que implementam essa interface podem ser instanciadas. Isso reforça a ideia de que as interfaces são contratos a serem seguidos por implementações concretas.
Deu para dar uma clareada?
Compreendi bastante. Acho que o resto vai ser mais fácil aprender na prática. Obrigado! =)
Quando você estiver trabalhando com Spring Framework, você vai trabalhar com algumas interfaces. Por exemplo, a interface JpaRepository que vem do Spring Boot Data JPA.
Essa interface tem um monte de métodos que nos ajuda a interagir com o banco de dados.
Bons estudos para nós e qualquer dúvida é só falar. 🫶