Java erlaubt keine Vererbung von mehreren Klassen (immer noch erlaubt es die Vererbung von mehreren Schnittstellen.), Ich weiß, dass es sehr viel mit dem klassischen Diamantproblem zusammenhängt. Aber meine Fragen sind, warum Java keine Mehrfachvererbung wie C ++ zulässt, wenn es keine Mehrdeutigkeit (und daher keine Chancen auf ein Diamantproblem) gibt, während man von mehreren Basisklassen erbt?
Es war eine Design-Entscheidung von Java. Du wirst es nie bekommen, also sorge dich nicht zu sehr darüber. Obwohl MI Ihnen helfen könnte, Mixins zu machen, ist das der einzige gute MI, der Sie jemals tun wird.
Ich habe gelesen, dass die meisten Programmierer die Mehrfachvererbung nicht korrekt verwenden. "Gehen Sie einfach fort und erben Sie von einer Klasse, nur um Code wiederzuverwenden" ist nicht die beste Vorgehensweise im Falle einer Mehrfachvererbung.
Viele Programmierer wissen in den meisten Fällen nicht, wann sie die einfache Vererbung verwenden sollen. Mehrfachvererbung muss mit Vorsicht verwendet werden und nur wenn Sie wissen, was Sie tun, wenn Sie ein gutes Design haben möchten.
Ich glaube nicht, dass das Fehlen einer Mehrfachvererbung in Java (wie in C ++) Einschränkungen in der Code / Anwendungsdesign / Problemdomänenzuordnung in Klassen verursacht.
Einfachheit. Um Tom Sintes ,
zu zitierenDas Java-Designteam strebte nach Java:
- Einfach, objektorientiert und vertraut
- Robust und sicher
- Architektur neutral und tragbar
- Hohe Leistung
- Interpretiert, mit Threads und dynamisch
Gründe für das Weglassen der Mehrfachvererbung aus der Java-Sprache stammen meist aus dem "einfachen, objektorientierten und vertrauten" Ziel. Wie eine einfache Sprache, die Schöpfer von Java wollten eine Sprache, die meisten Entwickler konnten ohne ausgiebiges Training greifen. Zu diesem Zweck, sie arbeitete, um die Sprache so ähnlich wie C ++ zu machen (vertraut) ohne die unnötige Komplexität von C ++ zu übernehmen (einfach).
Nach Ansicht der Designer verursacht die Mehrfachvererbung mehr Probleme und Verwirrung, als es löst. So schneiden sie mehrere Vererbung ab die Sprache (genauso wie sie die Überlastung des Bedieners reduzieren). Die Designer umfangreiche C ++ Erfahrung lehrte sie, dass mehrere Vererbung nur war die Kopfschmerzen nicht wert.
Wenn Java mehrere Vererbungen unterstützt, kann es andere Funktionen von java
beeinflussen
Betrachte super () -Methode, die verwendet wird, um super class constructor.if aufzurufen. Wenn das Programm mehrere Super-Klassen hat (wegen mehrfacher Vererbung), wird der Compiler verwirrt darüber, welcher Super-Klassen-Konstruktor aufgerufen werden sollte, und einen Fehler auslösen
Java-Designer haben das entschieden. Mehrfachvererbung kann durch die Verwendung von Schnittstellen simuliert werden.
Es ist wahr, dass Java die mehrfache Vererbung der Implementierung nicht unterstützt (nur vom Typ, d. h. Schnittstelle). Das war eine Designentscheidung.
Seit Java 8 wird jedoch die mehrfache Vererbung mit Standardmethoden unterstützt. Siehe Ссылка :
Mehrfache Vererbung der Implementierung ist die Fähigkeit zu erben Methodendefinitionen aus mehreren Klassen. Probleme ergeben sich damit Art der Mehrfachvererbung, z. B. Namenskonflikte und Mehrdeutigkeiten. ... Standardmethoden führen eine Form der Mehrfachvererbung von ein Implementierung.
Das Rautenproblem tritt auf, wenn mehrere Elternklassen ihre eigenen Implementierungen von etwas definieren und die Kindklasse dieser beiden sich mit der Mehrdeutigkeit der zu verwendenden Implementierung befassen muss. Was ist, wenn alle Klassen in Java von Object abgeleitet sind, das ist eine einzelne Elternklasse. "Ein Elternteil, mehrere abgeleitete Klassen" ist nicht dasselbe wie "Mehrere Eltern, einzelne abgeleitete Klasse"
Tags und Links java oop multiple-inheritance diamond-problem