Heim >Java >javaLernprogramm >Warum kann Java keine Mehrfachvererbung haben?
Mehrfachvererbung bedeutet, dass eine Unterklasse gleichzeitig von mehreren übergeordneten Klassen erben kann und dadurch die Merkmale mehrerer übergeordneter Klassen gleichzeitig aufweist, die Nachteile jedoch erheblich sind.
1. Wenn die von einer Unterklasse geerbte übergeordnete Klasse dieselbe Mitgliedsvariable hat, kann die Unterklasse beim Verweisen auf die Variable nicht bestimmen, welche Mitgliedsvariable der übergeordneten Klasse verwendet werden soll .
Zum Beispiel:
public class classA // 父类 classA { private int num = 0; } public class classB // 父类 classB { private int num = 1; } public class classC extends classA,classB // 子类 classC 继承于 classA 和 classB { public static void main(String [] args) { classC obj = new classC(); obj.print(); // 调用父类成员变量 num , 那 num 等于 0 还是 1 ? } public void print() { System.out.println(super.num); } }
2. Wenn mehrere übergeordnete Klassen, die von einer Unterklasse geerbt werden, dieselbe Methode haben und die Unterklasse die Methode nicht überschreibt (falls abgedeckt, dann Wenn Sie diese Methode direkt in der Unterklasse verwenden, können Sie beim Aufrufen dieser Methode nicht bestimmen, welche Methode der übergeordneten Klasse aufgerufen werden soll.
Zum Beispiel:
public class classA // 父类 classA { public void fun() { System.out.print("hello"); } } public class classB // 父类 classB { public void fun() { System.out.print("hello"); } } public class classC extends classA,classB { public static void main(String [] args) { classC t = new classC(); t.print(); } public void print() { super.fun(); // 调用父类中 fun 方法,但由于classA、classB都有fun()方法,将无法确定使用 // 哪个父类中的方法 } }
Daher erlaubt Java nur eine einzelne Vererbung, das heißt, eine Unterklasse kann nur von einer übergeordneten Klasse erben. Um jedoch die Funktionalität von Unterklassen zu erweitern, verwendet Java Schnittstellen, um die Nachteile zu überwinden, die entstehen, wenn keine Mehrfachvererbung verwendet wird.
Die Schnittstelle ist eine spezielle abstrakte Klasse. Die Mitgliedsvariablen in der Schnittstelle sind standardmäßig statische Endtypen, dh Konstanten, und die Methoden in der Schnittstelle sind abstrakt und haben keinen Methodenkörper.
Eine bestimmte Methode kann nur von der Klasse implementiert werden, die die Schnittstelle implementiert. Beim Aufruf wird immer nur die Methode der implementierenden Klasse aufgerufen (es besteht keine Mehrdeutigkeit), sodass es keinen zweiten Nachteil von mehreren gibt Vererbung; und aufgrund der Schnittstelle gibt es nur statische Konstanten, aber da statische Variablen die aufrufende Beziehung zur Kompilierungszeit bestimmen, wird beim Verweisen auf statische Variablen im Allgemeinen ein Fehler angezeigt Klassenname oder Schnittstellenname direkt, um Mehrdeutigkeiten zu vermeiden. Der erste Nachteil der Mehrfachvererbung besteht also auch nicht. Diese Mängel bestehen auch nicht, wenn eine Schnittstelle mehrere übergeordnete Schnittstellen erbt.
Das obige ist der detaillierte Inhalt vonWarum kann Java keine Mehrfachvererbung haben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!