Mehrfachvererbung in java
Java ist nicht so dass die Vererbung von mehreren Klassen (noch ist es erlaubt, die Vererbung von mehreren Schnittstellen.), Ich weiß, es ist sehr viel inline mit classic diamond-problem. Aber meine Frage ist warum ist java nicht erlaubt Mehrfachvererbung wie C++, wenn es keine Zweideutigkeit (und somit keine Chancen der Diamant-problem), während Erben von mehreren Basis-Klasse ?
- Wenn Sie möchten, Mixins in Verbindung(=die guten Teile MI) in eine jvm-Sprache, haben einen Blick auf scala.
- In meiner Erfahrung, multiple inheritence machen können, für sehr spröde code. Über Schnittstellen ist viel gesünder. Wenn Sie wollen, wieder verwenden, Logik, Delegierung verwenden. Moderne IDE ' s wie Eclipse machen es leicht, zu delegieren, Arbeit von einer Klasse zur anderen.
- Für alle, die sich für einen ausführlichen Artikel zu 'Mixins in Verbindung', hier ist eins. Wie der Artikel sagt, nur 1 Schnittstelle benötigt wird, wenn die Klassen müssen nicht Dienste von anderen. Wenn das der Fall ist, Lesen Sie einfach den 2. Abschnitt.
- Mehrfache Vererbung macht den code spröde, aber die mehrfache Vererbung von interface-Klassen macht guten code?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es wurde ein die design-Entscheidung von Java. Du wirst es niemals bekommen, also don T Sorge zu viel über es. Obwohl MI die Ihnen helfen könnten, machen Mixins in Verbindung, das ist das einzig gute, MI je tun wird Sie.
Habe ich gelesen, dass die meisten Programmierer nicht die Verwendung von Mehrfachvererbung in einem richtigen Weg. "Gehen Sie nur Voraus und von einer Klasse Erben nur zur Wiederverwendung von code" ist nicht die beste Praxis im Falle der Mehrfachvererbung.
Viele Programmierer nicht wissen, Wann Sie verwenden die einfache Vererbung in den meisten Fällen. Mehrfachvererbung muss mit Vorsicht verwendet werden und nur, wenn Sie wissen, was Sie tun, wenn Sie wollen, haben ein gutes design.
Ich glaube nicht, dass das fehlen der Mehrfachvererbung in java (wie in c++), wird die Einschränkungen in Ihrem code /Anwendung design /problem-domain-mapping in Klassen.
wenn java Mehrfachvererbung dann könnte Auswirkungen auf andere Eigenschaften von java
betrachten super () - Methode, die aufgerufen wird super-Klasse-Konstruktor.wenn das Programm hat mehrere super Klasse(wegen der Mehrfachvererbung) dann compiler verwirrt über die super-Klasse-Konstruktor aufgerufen werden soll und wirft einen Fehler
Einfachheit. Zitat Tom Sintes,
Java-Designer haben beschlossen, dass. Mehrfachvererbung simuliert werden kann durch die Verwendung von Schnittstellen.
Eine einfache Antwort ist, dass alle Klassen in Java-ableiten von java.lang.Objekt IIRC. Also, würden Sie immer haben eine Diamant-problem... 😀
Es ist wahr, dass Java nicht verwenden, um Mehrfachvererbung der Implementierung (nur der Typ also interface). Das war eine design-Entscheidung.
Jedoch seit Java 8 unterstützt es mehrfache Vererbung mit default-Methoden. Sehen http://docs.oracle.com/javase/tutorial/java/IandI/multipleinheritance.html:
Das diamond-problem entsteht, wenn mehrere übergeordnete Klassen definieren Ihre eigenen Implementierungen von etwas und die Kind-Klasse von diesen beiden hat den Umgang mit der Ambiguität, welche Implementierung zu verwenden ist. Was also, wenn alle Klassen in Java-ableiten von Objekt, das einer einzigen übergeordneten Klasse. "Alleinerziehende, die für mehrere abgeleitete Klassen" ist nicht das gleiche wie "Mehrere Eltern, single abgeleitete Klasse"