Wir wissen, dass Java nicht erlaubt mehrere Klassen zu erweitern, weil es in der Folge hätte Diamond Problem wo der Compiler konnte nicht entscheiden, welche Superklasse-Methode zu verwenden. Mit Standard-Methoden der Schnittstelle Diamond Problem wurden Einführung in Java 8. Das heißt, wenn eine Klasse zwei Schnittstellen implementiert, von denen jede die gleiche Standardmethode definiert und die implementierende Klasse die allgemeine Standardmethode nicht überschreibt, kann der Compiler nicht entscheiden, welche Implementierung ausgewählt werden soll.
Lösung:
Java 8 erfordert eine Implementierung für Standardmethoden um mehr als eine Schnittstelle implementiert zur Verfügung zu stellen. Wenn also eine Klasse beide oben genannten Schnittstellen implementieren würde, müsste sie eine Implementierung für die gemeinsame Standardmethode bereitstellen. Andernfalls würde der Compiler einen Kompilierzeitfehler ausgeben.
Frage:
Warum ist diese Lösung nicht für mehrere Klassenvererbung, durch gemeinsame Methoden überschreiben von Kind Klasse eingeführt?
Ich stimme dem Argument von Shared State für das Diamantproblem zu, aber wenn Sie Unterstützung für die Mehrfachvererbung in * Java * hätten, müssten Sie sich mit dem Problem befassen, eine der mehreren Implementierungen eines einzigen zu wählen Methode. Dieses Problem wird in der Frage und wie es für Schnittstellen in Java 8 gelöst wird angegeben. Die gleiche Lösung konnte nicht garantiert für Klassen angewendet werden. Oder habe ich etwas verpasst? – Harmlezz
@Harmlezz: Wie im letzten Absatz erwähnt, ist das Problem der Unterscheidung zwischen mehreren geerbten Nicht-'Abstrakt'-Methoden ein Problem der Mehrfachvererbung im Allgemeinen, aber es erfordert keinen gemeinsamen Super-Typ, um zu zeigen , hat nichts mit dem * Diamond * -Problem zu tun. Sie haben Recht, dass dies ein Problem ist, das nicht generell für Nicht-Interface-Klassen auf die gleiche Weise gelöst werden kann, aber dennoch ist es nicht das spezielle Problem, das "Diamond Problem" genannt wird. – Holger