Je n'aime vraiment pas le terme "hériter" ici, cela conduit à beaucoup de confusion. Java autorise uniquement les interfaces à étendre d'autres interfaces et les classes à implémenter des interfaces.
Si vous considérez une interface comme un ensemble mathématique de déclarations, chaque "extends" fournit simplement l'union de l'ensemble de la superinterface et celle de l'interface courante. Vous êtes donc autorisé à faire plusieurs "unions".
Lorsque vous arrivez finalement à une classe qui implémente une ou plusieurs interfaces, la sémantique ici est simplement que la classe doit fournir des implémentations pour toutes les méthodes de l'ensemble. Une classe implémentant plusieurs interfaces pourrait être réécrite en tant que classe implémentant une interface unique qui étend toutes les interfaces ci-dessus.
Dans le cas de classes héritant de plusieurs classes, cela n'est pas autorisé car cela conduit à une variété de problèmes, y compris le problème du diamant. Par exemple, si j'ai deux supertypes avec des implémentations différentes de la même signature de méthode, lequel devrait être utilisé dans le sous-type?
Duplicata de http://stackoverflow.com/questions/2515477/pourquoi-que-il-est-multiple-inheritance-in-java-but-implementing-multiple-interface –