Héritage Multiple
Le mécanisme d'héritage multiple proposé par C++ est trop rudimentaire et complexe en ce qui concerne le renommage, la redéfinition et la visibilité des méthodes héritées pour être utilisable (d'ailleurs, de nombreuses règles de programmation C++ recommandent de ne pas utiliser l'héritage multiple). Eiffel, quant à lui, maîtrise le puissant potentiel de l'héritage multiple par un mécanisme plus clair et plus complet. On peut également remarquer qu'en Eiffel, on peut hériter de primitives (attributs et routines complètes, pas seulement de prototypes) venant de plusieurs classes alors qu'en Java, on récupère du code d'un endroit (héritage) et des prototypes complètement vides de plusieurs endroits (interfaces)... L'héritage multiple peut être utile à plusieurs titres. Tout d'abord, pour permettre une modélisation plus concrète, plus proche du monde réel. Ainsi, par exemple, on peut avoir les classes suivantes


Fort logiquement, un hôtel_restaurant est, tant du point de vue conceptuel (typage) que du point de vue de la réutilisation, un héritier d'HOTEL et de RESTAURANT. Cet héritage multiple s'exprime tout simplement en Eiffel:

Ainsi, HOTEL_RESTAURANT réutilise non seulement l'interface (profils des routines et leurs assertions) mais également le code des ses deux ancêtres, sans aucune modification. De simples renommages ont été effectués pour éviter une collision sur le nom 'make reservation' et différencier la réservation d'une table de la réservation d'une chambre.
Il est bien entendu également possible, si nécessaire, de redéfinir le corps d'une routine en procédant de la même façon que dans la section Héritage.