JavaRush /Java-Blog /Random-DE /Kaffeepause Nr. 95. So lösen Sie das Mehrfachvererbungspr...

Kaffeepause Nr. 95. So lösen Sie das Mehrfachvererbungsproblem in Java

Veröffentlicht in der Gruppe Random-DE
Quelle: FreeCodeCamp Java ist heute eine der beliebtesten objektorientierten Programmiersprachen. Da es plattformunabhängig ist, finden Sie Java-Anwendungen auf jedem Gerätetyp und jedem Betriebssystem. Und weil Java relativ einfach zu erlernen ist, gehört es zu den Sprachen, die viele Programmierer beherrschen. Eine wichtige Funktion von Java, mit der Sie vertraut sein sollten, ist die Klassenvererbung. Durch Vererbung können Sie Ihren Code optimieren und so die Wiederverwendung von Klassen erleichtern. Wenn Sie bereits getesteten und debuggten Code wiederverwenden können, wird der Lebenszyklus der Softwareentwicklung kürzer und kostengünstiger. Kaffeepause Nr. 95.  So lösen Sie das Mehrfachvererbungsproblem in Java - 1Obwohl es sich theoretisch um ein einfaches Konzept handelt, erfordert die Codierung von Vererbungsbeziehungen Liebe zum Detail. Insbesondere im Hinblick auf die Mehrfachvererbung, bei der eine untergeordnete Klasse Eigenschaften von mehreren übergeordneten Klassen erbt. Java lehnt mehrere Vererbungsbeziehungen ab, weil sie Mehrdeutigkeit erzeugen. Es gibt jedoch mehrere Möglichkeiten, viele der gleichen Effekte zu erzielen, wenn Sie wissen, was zu tun ist. In diesem Artikel befassen wir uns mit Problemen bei der Mehrfachvererbung und diskutieren alternative Codierungsoptionen in Java.

Vererbungsterminologie

Um ein erfolgreicher Programmierer zu werden, muss man manchmal ein Problemlöser werden, um Workarounds für häufige Fehler oder Probleme zu finden. Dies ist ein wesentlicher Bestandteil einer sicheren und intelligenten Codierung. Ein solches Problem hängt mit der Mehrfachvererbung (oder vielmehr dem Fehlen derselben) in Java zusammen. Kaffeepause Nr. 95.  So lösen Sie das Mehrfachvererbungsproblem in Java - 2Um die Vererbung in Java vollständig zu verstehen, müssen Sie mit der grundlegenden Vererbungsterminologie der objektorientierten Programmierung (OOP) vertraut sein.
  • Klassen sind die grundlegende Musterstruktur in objektorientierten Programmiersprachen. Eine Klasse definiert gemeinsame Eigenschaften für eine Gruppe von Objekten.
  • Übergeordnete Klasse : Auch als Basisklassen oder Superklassen bekannt. Eine übergeordnete Klasse ist eine erweiterbare Klasse, die einer untergeordneten Klasse Funktionalität bereitstellt. Es ermöglicht eine Wiederverwendung. Die Definitionen und Funktionen der übergeordneten Klasse werden beim Erstellen von untergeordneten Klassen wiederverwendet.
  • Unterklasse : Allgemeiner als Unterklasse bezeichnet, erbt eine untergeordnete Klasse die Funktionalität einer anderen Klasse. Unterklassen sind erweiterte oder abgeleitete Klassen.
  • Vererbung : Die Beziehung zwischen übergeordneten und untergeordneten Klassen.

OOP-Vererbungstypen

Heutzutage werden viele beliebte objektorientierte Programmiersprachen verwendet, darunter Java, C++, JavaScript, Python, PHP, Ruby und Perl. Obwohl Vererbung in diesen OOP-Sprachen ein gemeinsames Konzept ist, existieren nicht alle Arten der Vererbung in jeder dieser Sprachen. Es ist äußerst wichtig, die gängigen Vererbungsarten und die Vererbungsbeschränkungen in der von Ihnen verwendeten Sprache zu kennen. Je mehr Sie über Vererbung wissen, desto effektiver werden Sie als Entwickler. Zu den von Java unterstützten Vererbungstypen gehören:
  • Vererbung auf einer Ebene : Wenn eine untergeordnete Klasse Funktionen von einer einzelnen übergeordneten Klasse erbt.
  • Mehrstufige Vererbung : Dies ist eine mehrstufige Form der einstufigen Vererbung. Bei der mehrstufigen Vererbung kann eine untergeordnete Klasse auch als übergeordnete Klasse für andere untergeordnete Klassen fungieren. Die Beziehung zwischen den einzelnen Ebenen ist linear – keine Zweige gehen höher als bei der Mehrfachvererbung. In diesem Fall verfügt die letzte untergeordnete Klasse über Funktionen aller darüber liegenden Ebenen.
  • Hierarchische Vererbung : Das Gegenteil von Mehrfachvererbung. Bei der hierarchischen Vererbung hat eine einzelne übergeordnete Klasse mehr als eine untergeordnete Klasse. Anstatt also darüber Äste zu haben, verzweigt es sich unten.
  • Hybride Vererbung : Wie der Name schon sagt, handelt es sich bei der hybriden Vererbung um eine Kombination anderer Arten der Vererbung.
Zusätzlich zu den oben aufgeführten Vererbungstypen gibt es andere Typen, die Java nicht unterstützt.
  • Mehrfachvererbung : Bei der Mehrfachvererbung hat eine untergeordnete Klasse mehr als eine übergeordnete Klasse. Obwohl Java und JavaScript keine Mehrfachvererbung unterstützen, tun OOP-Sprachen wie C++ dies.
  • Mehrpfad-Vererbung : Eine Mischung aus mehrfacher, mehrstufiger und hierarchischer Vererbung. Bei der Mehrpfad-Vererbung erbt eine untergeordnete Klasse ihre Eigenschaften und Funktionen von der übergeordneten Klasse und mehreren untergeordneten Klassen der übergeordneten Klasse. Da die Multipath-Vererbung auf Mehrfachvererbung basiert, unterstützt Java ihre Verwendung nicht.

Warum Java keine Mehrfachvererbung unterstützt

Das Hauptproblem bei der Mehrfachvererbung besteht darin, dass es zu Mehrdeutigkeiten in untergeordneten Klassen kommen kann. In einem Whitepaper aus dem Jahr 1995 erklärte der leitende Java-Designer James Gosling, dass Probleme mit der Mehrfachvererbung einer der Gründe für die Entwicklung von Java seien. Die der Mehrfachvererbung innewohnende Komplexität wird am deutlichsten am Diamantenproblem deutlich. Im Diamantproblem hat die Elternklasse A zwei unterschiedliche Kinderklassen B und C; Das heißt, die untergeordneten Klassen B und C erweitern die Klasse A. Kaffeepause Nr. 95.  So lösen Sie das Mehrfachvererbungsproblem in Java - 3Jetzt erstellen wir eine neue untergeordnete Klasse D, die sowohl die Klasse B als auch die Klasse C erweitert. Beachten Sie, dass wir über Mehrfachvererbung (D erweitert B und C) und hierarchische Vererbung (B und C erweitern) verfügen A) und mehrstufige Vererbung (D erweitert A, B und C). Beim Diamantproblem erben die untergeordneten Klassen B und C eine Methode von der übergeordneten Klasse A. Sowohl B als auch C überschreiben die geerbte Methode. Aber die neuen Methoden in B und C widersprechen sich. Die letzte untergeordnete Klasse D erbt zwei unabhängige und widersprüchliche Methoden von ihren mehreren übergeordneten Klassen B und C. Es ist nicht klar, welche Methode der Klasse D verwendet werden soll, sodass Unklarheiten entstehen. Andere OOP-Programmiersprachen implementieren unterschiedliche Methoden zur Lösung der Mehrdeutigkeit der Mehrfachvererbung.

So lösen Sie das Mehrfachvererbungsproblem in Java

Nur weil Mehrfachvererbung problematisch ist, heißt das nicht, dass sie nutzlos ist. Es gibt viele Situationen, in denen Sie möchten, dass eine Klasse Funktionen aus mehreren anderen Klassen enthält. Denken Sie nur an den Tesla Roadster, den Sie kaufen werden, wenn Sie ein äußerst erfolgreicher Softwareentwickler werden. Seine technischen Eigenschaften orientieren sich sowohl an der Sportwagenklasse als auch an der Klasse der Elektrofahrzeuge. Ein weiteres Beispiel: der Browser, über den Sie diesen Artikel lesen. Es verfügt über Funktionen aus der Klasse „Internet-Datenschutzlösungen“ und aus der allgemeinen Klasse „Internetbrowser“. Sie können in Java jedoch nicht mehrere Klassen erweitern. Wie geht diese Sprache also mit dem Problem der Mehrfachvererbung um? Java verwendet Strukturen, die Schnittstellen genannt werden. Schnittstellen sind abstrakte Typen, die das von Klassen zu implementierende Verhalten definieren. Da Schnittstellen abstrakt sind, enthalten sie keine detaillierten Anweisungen zu ihrem Verhalten. Stattdessen stellen Klassen konkrete Implementierungen des Schnittstellenverhaltens bereit. Schnittstellen haben mehrere charakteristische Merkmale:
  • Im Gegensatz zu Klassen instanziieren Sie Schnittstellen nicht. Stattdessen implementieren Klassen Schnittstellen.
  • Schnittstellen enthalten nur öffentliche Konstantendefinitionen und Methodenheader.
  • Schnittstellen können nur andere Schnittstellen erweitern, keine Klassen.
  • Schnittstellen können mehrere Schnittstellen erweitern und Klassen können mehrere Schnittstellen implementieren.
Mithilfe von Schnittstellen können wir das Diamantproblem nun effektiv umgehen. Unter Berücksichtigung der Tatsache, dass nur Schnittstellen nur andere Schnittstellen erweitern können und jede Klasse, die mehrere Vererbungsmerkmale erfordert, mehrere Schnittstellen implementieren muss, können wir Diamantproblemklassen überschreiben. Was früher die Klassen A, B und C waren, werden jetzt zu den Schnittstellen A, B und C. Die Schnittstellen B und C erweitern immer noch die Schnittstelle A, aber keine dieser Schnittstellen verfügt über spezifische Funktionen, sondern nur über spezifische Verhaltensweisen. Klasse D bleibt die Klasse, die für die spezifische Implementierung des Verhaltens der Schnittstellen B und C verantwortlich ist. Beachten Sie einen wesentlichen Unterschied: Klasse D erweitert die Schnittstellen B und C nicht, sondern implementiert sie. Auf diese Weise haben Sie eigentlich keine Mehrfachvererbung. Stattdessen haben Sie das Problem einfach neu formuliert.

Abschluss

Für jeden effektiven Java-Entwickler ist es wichtig, die Vererbung zu verstehen. Ebenso wichtig ist es, die Einschränkungen der Vererbung und die in Java integrierte Problemumgehung für herkömmliche Mehrfachvererbungsprobleme zu kennen. Wenn Sie lernen, wie Sie Schnittstellen erstellen, um die Auswirkungen der Mehrfachvererbung in Java nachzubilden, verbessern Sie Ihre Produktivität und Ihre Einstellungsmöglichkeiten.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION