Во-первых, вы должны различать множественное наследование и множественные супертипы, это две совершенно разные вещи.
Множественное наследование обычно отражает фактическое наследование реализации (например, наследование классов в большинстве языков ООП) и вызывает множество проблем. Одним из них является конфликт между именами и реализациями (например, два метода с одинаковым именем и другой реализацией), а затем возникают проблемы, подобные проблеме idamond.
Несколько супертипов обычно относится к возможности проверки типов (и в некоторых случаях приведение типов) и обычно не включает наследование реализаций. Например, в Java у вас есть интерфейсы, которые просто объявляют ваши методы. Таким образом, ваш подтип поддерживает объединение методов, поддерживаемых супертипами. Это создает меньше проблем, потому что у вас нет метода с несколькими реализациями.
Множественное наследование обычно включает в себя несколько супертипов, хотя некоторые языки, такие как C ++, позволяют изменять видимость этого факта (например, кто может знать, что тип B является подтипом типа A).
Насколько мне известно, нет необходимости поддерживать язык ООП, но, по крайней мере, несколько супертипов необходимы для используемого языка ООП, где большинство шаблонов проектирования могут быть реализованы простым способом. Множественное наследование, ИМХО, на самом деле не так уж полезно, чтобы оправдать сложность и затраты. Я переключился на Java десять лет назад и не могу сказать, что слишком много пропустил.