Non mi piace il termine "ereditare" qui, causa molta confusione.
Java consente solo alle interfacce di estendere altre interfacce e alle classi di implementare interfacce.
Se si considera un'interfaccia come un insieme matematico di dichiarazioni, ciascuna "estensione" fornisce semplicemente l'unione dell'insieme dalla superinterfaccia e quella dell'interfaccia corrente. È quindi consentito fare più "sindacati".
Quando si arriva a una classe che implementa una o più interfacce, la semantica qui è semplicemente che la classe deve fornire implementazioni per tutti i metodi dell'insieme. Una classe che implementa più interfacce potrebbe essere riscritta come una classe che implementa una singola interfaccia che estende tutte le interfacce di cui sopra.
Nel caso di classi che ereditano più classi non è consentito perché porta a una serie di problemi, incluso il problema dei diamanti. Per esempio, se ho due supertipi con differenti implementazioni della stessa firma del metodo, quale dovrebbe essere usato nel sottotipo?
Duplicato di http://stackoverflow.com/questions/2515477/why-there-is-no-multiple-inheritance-in-java-but-implementing-multiple-interface –