collections-java-api-2023 icon indicating copy to clipboard operation
collections-java-api-2023 copied to clipboard

interface ou class?

Open carvalhoewerton opened this issue 2 years ago • 3 comments

Esse conceito ainda não ficou bem claro pra mim, mas quando eu uso interface e quando eu uso classe?

carvalhoewerton avatar Aug 30 '23 03:08 carvalhoewerton

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 Animal será obrigada a fornecer implementações para os métodos emitirSom() e mover(). 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 tipo List.
  • 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 classe Vector, que é uma implementação da interface List e 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 Vector para LinkedList ou ArrayList, 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?

cami-la avatar Sep 01 '23 14:09 cami-la

Compreendi bastante. Acho que o resto vai ser mais fácil aprender na prática. Obrigado! =)

carvalhoewerton avatar Sep 02 '23 15:09 carvalhoewerton

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. 🫶

cami-la avatar Sep 02 '23 16:09 cami-la