Selbst wenn es schlechte Praktiken sein könnten, würde ich sagen, dass es Zeit gibt, dass es seinen Zweck erfüllen würde.
Selbst wenn es schlechte Praktiken sein könnten, würde ich sagen, dass es Zeit gibt, dass es seinen Zweck erfüllen würde.
Antworten:
/programming/995255/why-is-multiple-inheritance-not-allowed-in-java-or-c behandelt diese Frage gut.
Ich gehe davon aus: Die Designer wollten wahrscheinlich eine Sprache entwickeln, die gute Designprinzipien fördert. Ok, es gibt Zeiten, in denen Mehrfachvererbung perfekt ist. Dies ist jedoch eher die Ausnahme als die Regel und kann sehr leicht missbraucht werden. Also beschlossen die Designer, dies unmöglich zu machen.
In den Fällen, in denen dies sinnvoll wäre, müssen Sie Schnittstellen verwenden. Diese arbeiten, wenn auch ungeschickt; Aber dafür brauchen Sie sie nicht so sehr.
Nur um zu veranschaulichen, warum nicht, wird die Mehrfachvererbung von C ++ unterstützt, es wird jedoch dringend davon abgeraten, da Sie die meisten Aufgaben mit Komposition erledigen können, die Sie mit MI tun würden, jedoch auf eine viel sauberere Art und Weise. Im Gegensatz zu C ++ ist C # keine OOP-Sprache vom Typ "Hybrid", dh es hat sich nicht aus einer früheren Sprache entwickelt.
Wenn Sie wirklich mehrere Vererbungen benötigen, können Sie mehrere Schnittstellen implementieren.
Walter Bright ist sowohl der Schöpfer von D, der MI nicht enthält, als auch die einzige Person, die jemals einen ganzen C ++ - Compiler selbst geschrieben hat. Seiner Meinung nach fehlt D der MI, weil es zu schwierig ist, ein MI-System zu erstellen, das gleichzeitig effizient, einfach und nützlich ist. Ich vermute, dass Java und C # ähnliche Argumente verwenden. Sprachen wie Perl und Python haben keine Effizienz als primäres Ziel, daher haben sie ein System, das einfach und nützlich ist, aber schwer effizient zu implementieren ist. C ++ scheint keine Einfachheit als Ziel zu haben, daher hat es ein massiv kompliziertes System geschaffen, das fast niemand versteht.
Ich denke, Walter ist genau richtig. Wenn es eine Sprache gibt, die ein MI-System hat, das alle drei Kriterien einigermaßen gut erfüllt, hinterlassen Sie bitte einen Kommentar.
Mehrfachvererbung führt, wenn Sie sie häufig verwenden, zu sehr komplexen Situationen. Zu viel Komplexität mit geringem Nutzen ist der Grund, warum dies sowohl für Java als auch für C # ausgeschlossen wurde.
Weil die Sprachdesigner anscheinend ein besseres C ++ produzieren wollten, keine bessere Sprache im Allgemeinen. (Wie erfolgreich sie waren, kann diskutiert werden.)
Die Mehrfachvererbung im C ++ - Stil weist einige Probleme auf, sodass Personen, die aus C ++ stammen, diese im Allgemeinen weggelassen haben (Java, C #, D). Andere Sprachen, Eiffel und Common Lisp, um nur zwei zu nennen, machen es anders und scheinen nicht die gleichen Probleme zu haben.