Sobes.tech
Middle

Em que casos deve usar uma classe abstrata e em que casos uma interface?

sobes.tech IA

Resposta da IA

Classe abstrata:

  • Quando é necessária uma implementação comum de comportamento para subclasses, mas é necessária flexibilidade na sobrescrição de alguns métodos.
  • Quando as classes possuem campos de estado comuns (variáveis de instância) que devem ser herdados.
  • Quando é possível definir uma "relação" entre classes (relação "isto é um" ou "is-a").
  • Quando é necessário fornecer uma implementação padrão para a maioria dos métodos, exigindo que as subclasses implementem apenas os métodos específicos delas.

Interface:

  • Quando é necessário definir um contrato de comportamento que classes não relacionadas podem implementar.
  • Quando uma classe deve ter múltiplos tipos (herança múltipla de tipos).
  • Quando a flexibilidade e a capacidade de adicionar novo comportamento sem modificar classes existentes são importantes (através da implementação de uma nova interface).
  • Quando é necessária uma separação estrita entre a definição do comportamento e sua implementação.
  • Quando se deseja modelar uma relação de "pode ser", "tem-a" (embora a composição seja frequentemente preferida para "tem-a").

Exemplo:

A classe abstrata Animal pode ter campos comuns idade, nome e um método implementado eat(), mas um método abstrato makeSound(), que deve ser implementado por subclasses Dog e Cat.

A interface Flyable pode ser implementada pelas classes Bird e Airplane, que de outra forma não estão relacionadas nem herdam de um ancestral comum, mas ambos podem "voar".