Schlimm ist ja, daß selbst ein Singlepasscompiler, wie Delphi, theoretisch Mehrfachvererbung anbieten könnte,
also rein von den "sichtbaren" Schnittstellen, welche der Programmierer sieht. (vor dem Compilieren)
Man würde einfach nur beim neuen "kombinierten" Objekt/Interface die direkten Schnittstellen der Vorfahren nochmals durch den Compiler jagen und dabei die bekannten Fehlermeldungen werfen, wenn sich etwas überschneidet.
Zitat:
[dcc32 Fehler] Unit23.pas(39): E2254 Die überladene Prozedur 'Read' muss mit der Direktive 'overload' gekennzeichnet sein
[dcc32 Fehler] Unit23.pas(39): E2252 Es gibt bereits eine Methode 'Read' mit identischen Parametern
Nur bei der
RTTI müsste man sich was überlegen, wie man das macht.
Und auch die IS/AS-Prüfungen, und Ähnliches, würden etwas aufwändiger, da man dann ja keine lineare Vererbung mehr hat, sondern einen Baum.
Aber nein, es ist dennoch nicht möglich, in Delphi eine Mehrfachvererbung hinzubekommen.
(jedenfalls nicht so, daß man die Typen, so wie es jetzt möglich ist, einfach so blind in die neuen Vererbungslinien casten kann)
In dynamischen Sprachen, welche paktisch alles zur Laufzeit parsen und nicht mit festen Indize/Adressen arbeiten, wie z.B. Java/PHP/JavaScript, ist das halt was Anderes.
Klasse/Interface 1
* Addresse 1 = Funktion A
* Addresse 2 = Funktion B
Klasse/Interface 2
* Addresse 1 = Funktion C
* Addresse 2 = Funktion D
Klasse/Interface 1+2
* Addresse 1 = Funktion A oder Funktion C
* Addresse 2 = Funktion B oder Funktion D
(das Selbe nochmal für alle Felder/Variablen in der Klasse usw.)
Wenn man jetzt auf Adresse 1 zugreift, bei wem soll man denn nun rauskommen?