Frage

Java ist keine Vererbung erlaubt aus mehreren Klassen (noch erlaubt es Vererbung von mehreren Schnittstellen.), Ich weiß es mit klassischem Diamant-Problem sehr viel Inline ist. Aber meine Fragen sind, warum Java ist die Mehrfachvererbung wie C ++ nicht erlaubt, wenn es keine Zweideutigkeit ist (und somit keine Chancen Diamant-Problems), während von mehrere Basisklasse erben?

War es hilfreich?

Lösung

Es war eine Design-Entscheidung Java. Du wirst es nie bekommen, also keine Sorge zu viel über sie. Obwohl MI könnten Sie Mixins machen helfen, das ist die einzige gute MI wird immer Sie tun.

Andere Tipps

Ich habe gelesen, dass die meisten Programmierer keine Mehrfachvererbung in der richtigen Weise verwenden Sie. „Gerade voran gehen und von einer Klasse erbt nur wiederzuverwenden Code“ ist nicht die beste Praxis bei Mehrfachvererbung.

Viele Programmierer wissen nicht, wann in den meisten Fällen einfach Vererbung zu verwenden. Mehrfachvererbung muss mit Vorsicht und nur dann verwendet werden, wenn Sie wissen, was Sie tun, wenn Sie ein gutes Design haben wollen.

Ich glaube nicht, dass das Fehlen von Mehrfachvererbung in Java (wie in C ++) Einschränkungen im Code / Application Design / Problembereich Mapping in Klassen setzen.

, wenn Java-Unterstützung Mehrfachvererbung, dann kann es andere Eigenschaften
java bewirken betrachten super () Methode, die Superklasse constructor.if Programm aufrufen verwendet wird, um mehrere Superklasse (wegen der Mehrfachvererbung), dann wird Compiler über die Super-Klasse Konstruktor verwirrt sollte aufgerufen werden, und einen Fehler melden

Einfachheit. Um Zitat Tom Sintes ,

  

Das Java-Design-Team bemühte sich Java zu machen:

     
      
  • Einfache, objektorientiert, und vertraut
  •   
  • Robust und sicher
  •   
  • Architektur neutral und tragbare
  •   
  • High Performance
  •   
  • Ausgelegt, Gewinde und dynamisch
  •   
     

Die Gründe für die Mehrfachvererbung von der Java-Sprache Weglassen   stammt meist aus dem „einfachen, objektorientiert, und vertraut“ Ziel. Wie   eine einfache Sprache, die Java Schöpfer wollte eine Sprache, die die meisten   Entwickler ohne umfassende Ausbildung greifen können. Zu diesem Zweck sie   gearbeitet, um die Sprache, ähnlich wie C ++ wie möglich (bekannt) zu machen   ohne Durchführung über C ++ 's unnötige Komplexität (einfach).

     

Nach Meinung der Designer, verursacht Mehrfachvererbung mehr Probleme   und Verwirrung als sie löst. So schneiden sie die Mehrfachvererbung von   die Sprache (wie sie Betreiber Überlastung schneiden). Die Designer   umfangreiche C ++ Erfahrung lehrte sie, dass die Mehrfachvererbung nur   war die Kopfschmerzen nicht wert.

Java-Designer entschieden, dass. Mehrfachvererbung kann durch die Verwendung von Schnittstellen simuliert werden.

Eine einfache Antwort ist, dass alle Klassen in Java aus java.lang.Object IIRC abzuleiten. Also, würden Sie immer hat einen Diamanten Problem ... :-D

Es ist wahr, dass Java nicht verwenden, um Mehrfachvererbung der Umsetzung (nur vom Typ d-Schnittstelle) zu unterstützen. Das war eine Design-Entscheidung.

Da jedoch Java 8 unterstützt es die Mehrfachvererbung mit Standardmethoden. Siehe http://docs.oracle.com/javase/tutorial/java/ iAndi / multipleinheritance.html :

  

Mehrfachvererbung der Implementierung ist die Fähigkeit zu erben   Methodendefinitionen aus mehreren Klassen. Probleme ergeben sich mit diesem   Art von Mehrfachvererbung, wie Namenskonflikte und Mehrdeutigkeit.   ... Standard-Methoden einführen eine Form von Mehrfachvererbung von   Umsetzung.

Der Diamant Problem entsteht, wenn mehrere übergeordneten Klassen ihre eigenen Implementierungen von etwas und die Klasse dieser beiden Kinder definieren hat mit der Mehrdeutigkeit von der mit der Umsetzung befassen zu verwenden. Was also, wenn alle Klassen in Java von Object ableiten, das ist eine einzige übergeordnete Klasse. „Alleinerziehende, mehrere abgeleitete Klassen“ ist nicht dasselbe wie „Multiple Eltern, Single abgeleiteten Klasse“

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top