Em que situacao devo usar classes abstratas ou interfaces?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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).