No contexto de orientação a objetos, ainda tenho dificuldade em identificar, na prática, quando devo optar pelo uso de herança (extends) e quando devo utilizar interfaces (implements).
Considerando o exemplo simples da aula, imagino um cenário onde Titulo poderia ser definido como uma interface, e classes como Filme e Serie a implementariam.
Com base nisso, poderiam me explicar quais são os critérios técnicos e cenários mais adequados para decidir entre herança e interface?
Em especial:
- Quando modelar uma relação como "é um" (herança)?
- Quando abstrair comportamentos utilizando interfaces?
- Existe alguma boa prática ou regra de design que ajude nessa tomada de decisão no dia a dia?