Was ist Mehrfachvererbung in Java?

OOP und Vererbung

Die Verwendung der objektorientierten Programmierung verwendet das Konzept der Vererbung, um die Funktionalität von Objekten zu erweitern. Überlegen Sie, wann ein Programmierer ein Objekt erstellt. Später können Sie sehen, dass Sie ein sehr ähnliches Objekt mit nur geringen Unterschieden erstellen müssen (möglicherweise wird die Funktionalität eines vorherigen Objekts in einem neuen Kontext erweitert). Hier erscheint die Vererbung. Ein Objekt, das ein Programmierer von einem anderen "Basis" -Objekt "ableitet", erbt die Methoden und Variablen der Klasse und kann dann weitere Funktionen hinzufügen (wie im folgenden Java-Beispiel):

public class Sphere {öffentlicher int Radius; }

public class Ball extendiert Sphere {public string color; // Ball fügt die Variable "color" hinzu, verwendet aber auch die Variable "radius"}

Mehrfachvererbung

Irgendwann kann ein Programmierer versucht sein, eine einzelne Klasse aus mehreren Klassen abzuleiten. Dies ist als "Mehrfachvererbung" bekannt, und obwohl es nützlich erscheint, kann es Probleme verursachen, wie z. B. das wichtige "Diamantproblem". Dieses Problem tritt auf, wenn zwei Klassen von derselben Klasse erben (z. B. Klasse B und C von Klasse A), während eine andere Klasse (D) von B und C abgeleitet ist. Wenn ein Objekt D erstellt wird, behandelt das System es als eine Art Basisklasse (Klasse "Ball" oder Ball und "Kugel" oder Kugel zum Beispiel). Bei der Diamantproblematik kann das System nicht eindeutig bestimmen, welche Klasse D (Typ ABD oder Typ ACD?) Probleme verursacht.

Java und Mehrfachvererbung

Aufgrund von Problemen mit der Mehrfachvererbung lässt Java dies nicht zu. In Wirklichkeit können Klassen, die von mehreren Basisklassen abgeleitet sind, auf sichere Weise unter Verwendung von "Schnittstellen" erreicht werden. Eine Schnittstelle ähnelt einer Klasse, definiert jedoch nicht nur die Struktur der Klasse, sondern auch ihren tatsächlichen Code. Eine Basisklasse, die eine Schnittstelle implementiert, "erbt" nicht unbedingt die Funktionalität der Schnittstelle, sondern verspricht nur die Verwendung ihrer Struktur. Da eine Klasse, die eine Schnittstelle implementiert, nicht von einer anderen Klasse erbt (und kein Typ der Basisklasse ist), kann ein Programmierer mehrere Schnittstellen mit derselben Klasse implementieren.

Beispiel: Vererbung und Schnittstellen

Das folgende Beispiel zeigt den Unterschied zwischen der Vererbung von Objekten und einer Schnittstelle. Eine Klasse, die von einer anderen erbt, erhält Zugriff auf die Basisklasse, da sie im Grunde genommen zu einem Typ dieser Klasse wird (wie in den Klassen "Ball" und "Sphere"). Eine Klasse, die eine Schnittstelle implementiert, verspricht nur, die Struktur ihrer Schnittstelle zu implementieren: Es handelt sich nicht um einen Typ dieser Schnittstelle:

Basisschnittstelle {int doubleA (); // Anmerkung: In der Schnittstelle ist kein realer Code definiert}

öffentliche Klasse B implementiert Basic {

public int a;

public int doubleA () // Klasse B muss die Methode "doubleA ()" definieren, um "Basic" zu implementieren {return a * 2;}}

Interessante Artikel