Galera gostaria de obter a ajuda de vocês em uma questão que o professor passou na faculdade. Então la vai…
Por que em Java, se deve priorizar o uso de
interfaces, ao invés de herança com classes?
Não existe uma resposta específica e na real esse conceito não se aplica só ao Java mas à orientação à objetos.
Interfaces são tipos abstratos de dados, definem o comportamento que um objeto deve implementar.
Se você modela seu sistema de forma a só depender das interfaces, a manutenção e testes se tornam mais simples, as interfaces fazem o sistema ter um acoplamento fraco.
Quando você usa herança, de cara você já tem um acoplamento forte da subclasse com sua classe base, o que pode ser um problema por exemplo quando você fizer alguma manutenção na classe base.
Neste link tem alguns artigos interessantes pra você ler: http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
Complementando o que o Staroski sabidamente disse, existe o problema da herança multipla. O Java não aceita isso, mas o python por exemplo aceita. Por isso você pode usar interface para contornar esse problema.
Exatamente, em Java se resolve o problema de herança múltipla utilizando herança múltipla de interfaces e realizando a implementação através de composição de classes.
Num primeiro momento parece complicado, mas fica um código bastante robusto, reaproveitável e de fácil manutenção.