Mehrfachvererbung in Java

8

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?

    
Silent Warrior 11.08.2009, 19:36
quelle

8 Antworten

16

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.

    
Randolpho 11.08.2009, 19:39
quelle
6

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.

    
Andreas 11.08.2009 19:44
quelle
2

Einfachheit. Um Tom Sintes ,

zu zitieren
  

Das 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.

    
Rose Perrone 06.04.2012 15:00
quelle
2

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

    
code_and_die 15.06.2013 17:26
quelle
1

Java-Designer haben das entschieden. Mehrfachvererbung kann durch die Verwendung von Schnittstellen simuliert werden.

    
Truncarlos 27.11.2012 14:34
quelle
0

Eine einfache Antwort ist, dass alle Klassen in Java von java.lang.Object IIRC abgeleitet sind. Also, Sie würden immer ein Diamantproblem haben ... :-D

    
Massa 11.08.2009 19:54
quelle
0

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.

    
Mircea Baja 31.10.2015 23:44
quelle
-1

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"

    
Fed up 11.03.2011 19:43
quelle