Em que situacao devo usar classes abstratas ou interfaces?
Em que situacao devo usar classes abstratas ou interfaces?
Classes abstratas e herança são usadas com 2 vantagens: reutilização de código e polimorfismo. A interface apenas oferece 1 dessas vantagens: o polimorfismo, porém quando usada em conjunto com a composição (terceirização de métodos e atributos comuns entre classes para uma classe específica) ela oferece mais flexibilidade ao seu código. No fim, depende do codígo qual metódo voce quer usar e se voce precisa de uma dessas duas vantagens no seu código em primeiro lugar.
Você usa classe abstrata quando quer que as classes filhas reaproveitem seus métodos e atributos e também que ocorra o polimorfismo entre as classes. No caso das interfaces, você as utiliza quando precisa apenas do polimorfismo entre classes (não ocorre o reaproveitamento de código). Uma distinção importante entre as duas é que nas classes abstratas é possível declarar atributos da classe e também implementar métodos, já nas interfaces além de não ser possível declarar atributos os métodos não podem ser implementados (são abstratos).