Immer wieder taucht die Diskussion auf, ob Mehrfachvererbung von Implementationen in Objektorientierten Programmiersprachen sinnvoll ist. Ich denke ja. Von den Gegnern der Mehrfachvererbung wir immer wieder vorgebracht, man könne doch alles mit Interfaces und Delegates erledigen. Das stimmt, aber nur insoweit als dass man theoretisch auch alles in Assembler programmieren könnte.
Um das einmal etwas zu verdeutlichen, habe ich ein einfaches Beispiel als UML Diagram gebaut. Das Ziel besteht darin, am Ende die zwei Klassen “Fahrrad” und “Roller” wie ein Fahrzeug, wie ein Sportgerät und zum rollern benutzen zu können. Dabei sollen für beide Standardimplementationen der Interfaces verwendet werden. Die gelben Klassen im Diagramm stellen die Lösung mit Mehrfachevererbung dar, die blauen die Lösung mti Einfachvererbung, Delegates und Interfaces. Ich denke, jeder sieht sofort, dass die Lösung mit Mehrfachvererbung übersichtlicher ist und im Ausdruck klarer.
Das Beispiel ist natürlich so gewählt, dass möglichst deutlich auffällt, warum manchmal Mehrfachvererbung sinnvoll ist. In vielen Fällen genügt die Lösung mit Delegates und Interfaces durchaus, aber nichts hält einen davon ab, Delegates und Interfaces zu nutzen, wo immer es sinnvoll ist, wenn man auch Mehrfachvererbung nutzen könnte. Es ist ja nicht so, dass man unbedingt immer zwangsweise Mehrfachvererbung einsetzen muss, aber wenn man es kann, vereinfacht sie doch machmal das Design deutlich.
Mir ist auch das Diamantproblem bei der Mehrfachvererbung bekannt. Die Tatsache, dass man sich mit einem Hammer unbeabsichtigt auf die Finger schlagen kann, ändert aber nichts daran, dass der Hammer ungemein praktisch ist, wenn es darum geht, ein Bild mit Hilfe eines Nagels an die Wand zu hängen.