Множественное наследование - это шаг к усилению абстракции и упрощению реюза кода (действительно, раз научились наследовать код от одного блока, давайте научимся сразу от десяти - удобный способ повторно использовать этот код). Однако, имеет свои недостатки (поэтому, и не прижился во многих языках), одна из которых (и, возможно, основная) -
Diamond problem (то, о чём спрашивал
Андрей Параничев): решение зависит от реализаций, но в целом, в теории, этот алгоритм называется
Method resolution order (порядок разрешения имён методов), или
линеаризацией -
C3 linearization - суть: выстроить (линеаризовать) дерево методов так, чтобы не возникло конфликтов имён (т.е превратить в цепь).
Альтернативой множественному наследованию являются интерфейсы и примеси (ну это и так все знают
).