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