types inheritance java single vs multiple inheritance
Erfahren Sie anhand einfacher Beispiele alles über die verschiedenen Arten der Vererbung in Java. Finden Sie heraus, ob Java Mehrfachvererbung unterstützt:
In unserem letzten Tutorial haben wir die Vererbung in Java zusammen mit den verschiedenen Grundkonzepten für die Vererbung an die Leser eingeführt.
In diesem Tutorial werden wir uns weiter mit dem Thema Vererbung befassen und mehr über die Arten der Vererbung erfahren.
=> Überprüfen Sie ALLE Java-Tutorials hier.
Starten Sie ein Java-Projekt in Eclipse
Was du lernen wirst:
Arten der Vererbung in Java
Abhängig von der Art und Weise, wie die Klassen vererbt werden und wie viele Klassen geerbt werden, gibt es die folgenden Vererbungstypen, wie in der folgenden Abbildung dargestellt.
Wie in der obigen Abbildung gezeigt, gibt es in der objektorientierten Programmierung fünf Arten von Vererbungen, wie unten beschrieben:
# 1) Einzelvererbung: Wenn eine abgeleitete Klasse oder Unterklasse nur von einer Basis oder Oberklasse erbt, handelt es sich um eine Einzelvererbung.
# 2) Mehrstufige Vererbung: In der mehrstufigen Vererbung haben wir mehr als eine Ebene, in der eine Klasse von einer Basisklasse erbt und die abgeleitete Klasse wiederum von einer anderen Klasse geerbt wird.
# 3) Hierarchische Vererbung: Bei dieser Art der Vererbung wird eine Vererbungshierarchie gebildet, wenn eine Oberklasse von mehr als einer Klasse geerbt wird.
# 4) Mehrfachvererbung: Mehrfachvererbung ist diejenige, bei der eine Klasse Eigenschaften und Verhalten von mehr als einem übergeordneten Element erben kann.
# 5) Hybridvererbung: Wenn eine oder mehrere Arten der Vererbung kombiniert werden, wird dies zu einer hybriden Vererbung.
Beachten Sie, dass Java nur einzelne, mehrstufige und hierarchische Vererbungstypen mithilfe von Klassen unterstützt. Java unterstützt keine Mehrfach- und Hybridvererbung mit Klassen.
Jetzt werden wir jede Art der Vererbung anhand von Programmierbeispielen ausführlich diskutieren.
Einzelvererbung in Java
Eine einzelne Vererbung wird wie folgt dargestellt:
Hier erbt eine Unterklasse von einer einzelnen Oberklasse. Dies ist eine Einzelvererbung. Jedes Tier wie Hund erbt von der Tierart. Dies ist die einfachste Form der Vererbung.
Im Folgenden finden Sie ein Java-Programm, das die Einzelvererbung erklärt.
//base class:Animal class Animal { void Action_eat() { System.out.print('eating...'); } } //derived class:Dog class Dog extends Animal { void Action_bark() { System.out.print('barking...'); } } class Main{ public static void main(String args()){ Dog d=new Dog(); //create an object of derived class System.out.print('The dog is '); d.Action_bark(); //call derived class method System.out.print('
The dog is '); d.Action_eat(); //call base class method } }
Ausgabe:
Hier haben wir eine Methode eat (Action_eat) in der Basisklasse Animal, die Tierarten gemeinsam ist. Wir haben eine abgeleitete Klasse Hund, die von der Tierklasse abgeleitet ist. In der Hundeklasse haben wir eine für Hundearten spezifische Methode, Rinde (Action_bark).
Dann erstellen wir ein Dog-Objekt in der Hauptmethode. Da die Dog-Klasse die Animal-Klasse geerbt hat, kann dieses Objekt sowohl die eat- als auch die bark-Methode aufrufen.
Mehrstufige Vererbung in Java
Bei der mehrstufigen Vererbung haben wir eine Vererbungskette. Dies bedeutet, dass wir eine übergeordnete Klasse haben, die von einer abgeleiteten Klasse geerbt wird. Die abgeleitete Klasse fungiert wiederum als Eltern einer anderen Klasse und so weiter.
Die mehrstufige Vererbung kann wie folgt dargestellt werden:
Wie in der obigen Abbildung zu sehen ist, gibt es eine übergeordnete Klasse A. Klasse B erbt von Klasse A. Dann gibt es eine andere Klasse C, die wiederum von Klasse B erbt. Somit können wir sehen, dass sie eine Vererbungskette bildet. Hier wird Klasse B zu einer Zwischenklasse, die die Klassen A und C verbindet.
Wenn wir mit unserem Beispiel für die Tierklasse unten fortfahren, können wir eine Hundeklasse haben, die von der Tierklasse abgeleitet ist. Dann können wir einen anderen Welpen der Klasse haben, der ein Baby ist, das von der Hundeklasse abgeleitet ist. Auf diese Weise können wir die mehrstufige Vererbung haben.
Ein Beispielprogramm für die mehrstufige Vererbung ist unten dargestellt.
import java.util.*; import java.lang.*; import java.io.*; //parent class A class A { public void print_A() { System.out.print('SoftwareTestingHelp '); } } //Derived class B - intermediary class B extends A { public void print_B() { System.out.print('Java Series '); } } //Derived Class C class C extends B { public void print_C() { System.out.print('Tutorials'); } } public class Main { public static void main(String() args) { C c_obj = new C(); //create Class C obj c_obj.print_A(); //call grandparent class method c_obj.print_B(); //call parent class method c_obj.print_C(); //call member method } }
Ausgabe:
Wir haben die oben gezeigte genaue Kette programmiert. Dann erstellen wir in der Hauptmethode ein Objekt der Klasse C. Das Objekt der Klasse C kann dann auf die Methoden seines übergeordneten B sowie des Großelternteils A zugreifen.
Hierarchische Vererbung in Java
Eine Klasse kann mehr als eine Klasse haben. Wir haben also eine Basis oder Oberklasse und mehr als eine Unterklasse. Diese Art der Vererbung wird als 'hierarchische Vererbung' bezeichnet.
Die hierarchische Vererbung ist nachstehend schematisch dargestellt:
Als Beispiel für hierarchische Vererbung können wir die Tierklasse als Oberklasse darstellen und dann mehr als ein Tier wie Katze, Hund, Kuh usw. daraus ableiten.
Das folgende Java-Programm demonstriert die hierarchische Vererbung in Java.
//class Parent class Parent { public void print_parent() { System.out.println('In ::Parent class'); } } //child1 class class Child1 extends Parent { public void print_child1() { System.out.println('In ::Child1 class'); } } //child2 class class Child2 extends Parent { public void print_child2() { System.out.println('In ::Child2 class'); } } //child3 class class Child3 extends Parent { public void print_child3() { System.out.println('In ::Child3 class'); } } public class Main { public static void main(String() args) { Child1 ch1 = new Child1(); //create a Child1 class object ch1.print_child1(); //call its member method Child2 ch2 = new Child2(); //create a Child2 class object ch2.print_child2(); //call its member method Child3 ch3 = new Child3(); //create a Child3 class object ch3.print_child3(); //call its member method ch3.print_parent(); //call parent class method with any object } }
Ausgabe:
Wie wir aus dem Programm sehen, haben wir eine Elternklasse und drei Kinderklassen, die von diesem Elternteil abgeleitet sind. In der Hauptmethode erstellen wir ein Objekt für jede der untergeordneten Klassen und rufen ihre jeweiligen Mitgliedsmethoden auf.
Beachten Sie beim Aufrufen der Methoden der übergeordneten Klasse, dass wir jedes der untergeordneten Klassenobjekte verwenden können, da alle Zugriff auf die übergeordnete Klasse haben.
Mehrfachvererbung in Java
Mehrfachvererbung ist eine Situation, in der eine Klasse von mehr als einer Klasse erben kann, d. H. Eine Klasse kann mehr als ein Elternteil haben. Auf diese Weise kann die Klasse mehr als eine Oberklasse haben und so die Eigenschaften und das Verhalten aller ihrer Oberklassen erlangen.
Die schematische Darstellung der Mehrfachvererbung ist unten gezeigt:
Wie oben gezeigt, können wir eine Klasse von mehr als einer Klasse gleichzeitig ableiten. Auf diese Weise erhält die abgeleitete Klasse die Funktionen aller übergeordneten Klassen. Dies kann zu ernsthaften Unklarheiten führen, insbesondere wenn die vererbten Merkmale gleich sind.
Hinweis:Java unterstützt keine Mehrfachvererbung mithilfe von Klassen. Es unterstützt jedoch die Mehrfachvererbung mithilfe von Schnittstellen, die wir in unserem nächsten Tutorial zur Vererbung behandeln werden.
Da Java keine Mehrfachvererbung mit Klassen unterstützt, werden wir nicht auf die Details eingehen. Später im Lernprogramm werden wir jedoch versuchen, die Gründe zu verstehen, warum Java die Mehrfachvererbung nicht unterstützt.
Hybride Vererbung in Java
Die hybride Vererbung ist eine Kombination aus einer oder mehreren Arten von Vererbungen, die wir oben erörtert haben. Jede Kombination führt jedoch zu einer Art Mehrfachvererbung, die von Java nicht unterstützt wird.
Eine hybride Vererbung kann wie folgt schematisch dargestellt werden.
Daher unterstützt Java die Hybridvererbung auch bei Klassen nicht. Aber wie bei der Mehrfachvererbung können wir die Hybridvererbung in Java mithilfe von Schnittstellen implementieren. Wir werden dies in unserem nächsten Tutorial ausführlich besprechen.
Warum unterstützt Java keine Mehrfachvererbung?
Java zielt auf Einfachheit in Programmen ab. Dies gilt auch für OOP-Funktionen. Wenn es also um Mehrfachvererbung geht, können einige mehrdeutige Situationen auftreten, wenn wir eine Klasse von mehr als einer Klasse ableiten.
Lassen Sie uns nun die Probleme verstehen, die auftreten können, wenn unser Programm mehrfach vererbt wird.
Betrachten Sie die folgenden Mehrfachvererbungssysteme.
Wenn wir das obige System sehen, ist es selbsterklärend. Hier sind Klasse A und Klasse B Klassen mit zwei Elternteilen, die von Klasse C geerbt wurden. Nun haben wir gezeigt, dass sowohl die Klassen A als auch B eine Methode mit demselben Namen haben, d. H. Print (). Wenn also Klasse C A und B erbt, werden beide Versionen der print () -Methode abgerufen.
In diesem Fall weiß Klasse C nicht, welche Methode sie erben soll. Dies ist die oben erwähnte mehrdeutige Situation, die bei Mehrfachvererbung auftritt.
Daher gibt Java einen Compilerfehler aus, wenn die Klasse von mehr als einer Klasse erbt.
Mobile Test Interview Fragen und Antworten für erfahrene
Das folgende Java-Programm wird dies demonstrieren.
class A{ void print(){ System.out.println('Class A :: print()'); } } class B{ void print(){ System.out.println('Class B :: print()'); } } class C extends A , B{ //let C inherit from A and B } public class Main { public static void main(String() args) { C cObj = new C(); c.print(); } }
Ausgabe:
Wie aus der Ausgabe hervorgeht, gibt der Java-Compiler einen Fehler aus, wenn er feststellt, dass die Klasse zwei Klassen erweitert.
Obwohl Java nicht zulässt, dass zwei Klassen gleichzeitig vererbt werden, bietet es uns einen Weg, diese Einschränkung zu umgehen. Wir können Mehrfachvererbung mithilfe von Schnittstellen anstelle von Klassen simulieren. Wir werden dies in unseren nachfolgenden Tutorials diskutieren.
Diamantproblem
Mehrfachvererbung führt zu einer Situation namens 'Diamantproblem'.
Bedenken Sie, dass wir das folgende Vererbungssystem haben.
class Super{ void show(){} } class Sub1 extends super{ void show1(){} } class Sub2 extends super{ void show2(){} } class sample extends Sub1,Sub2{ //Sample class code here }
Wir können dieses System wie folgt schematisch darstellen:
Wie aus dem obigen Diagramm ersichtlich ist, erscheint das gesamte Vererbungssystem in einer Rautenform. Aufgrund dieser Diamantstruktur wird die Mehrdeutigkeit als „Diamantproblem“ bezeichnet.
Wie bereits für die Mehrfachvererbung erläutert, besteht die Mehrdeutigkeit hier in der Mehrfachanzahl von Kopien der show () -Methode, die die Sample-Klasse als Ergebnis der Vererbung erhält. Da es mehrere Pfade gibt, wird die show () -Methode erreicht und es besteht eine Unklarheit darüber, welche Kopie geerbt werden soll.
Wie bei der Mehrfachvererbung kann das Diamantproblem auch über Schnittstellen gelöst werden.
Vererbungsregeln In Java
Bis jetzt haben wir die Grundlagen der Vererbung sowie die Arten der Vererbung in Java kennengelernt. Lassen Sie uns einige Regeln auflisten, die wir bei der Entwicklung von Anwendungen mit Vererbung befolgen müssen.
Regel 1: Java unterstützt keine Mehrfachvererbung
Wie wir bereits gesehen haben, unterstützt Java in keiner Form die Mehrfachvererbung. Wenn in einem Programm eine Mehrfachvererbung versucht wird, gibt der Java-Compiler einen Compilerfehler aus.
Regel 2: Java erlaubt keine zyklische Vererbung
Eine Klasse, die sich selbst erbt, um einen Zyklus zu bilden, wird als zyklische Vererbung bezeichnet.
Betrachten Sie die folgenden Klassen, Klasse1 und Klasse2.
Klasse Klasse1 erweitert Klasse 2 {}
Klasse Klasse2 erweitert Klasse 1 {}
Die obige Situation bildet eine Schleife. Dies ist in Java nicht zulässig.
Regel 3: Wir können keine privaten Datenmitglieder erben
Wir haben bereits im Thema 'Zugriffsmodifikatoren' erfahren, dass Mitglieder mit privatem Zugriff nicht vererbt werden können.
Regel 4: Konstruktoren werden nicht vererbt
Da Konstruktoren zum Erstellen von Klassenobjekten verwendet werden, werden sie nicht von einer Klasse an eine andere vererbt.
Regel 5: Wir können die übergeordnete Referenz verwenden, um auf untergeordnete Objekte zuzugreifen
Wir haben bereits verschiedene Beispiele für Vererbung gesehen. Wir können eine Referenz vom Typ Elternklasse erstellen und ihr dann ein abgeleitetes Klassenobjekt zuweisen, das mit dem neuen Schlüsselwort erstellt wurde.
Wenn super eine Superklasse ist und sub eine Klasse ist, die von super abgeleitet ist, wie unten gezeigt.
class super{} class sub extends super{ public static void main(String() args){ super s_obj = new sub(); } }
Regel 6: Übergeordnete Konstruktoren werden aufgrund von super () in abgeleiteten Konstruktoren ausgeführt
Eine der Regeln besagt, dass Konstruktoren nicht vererbt werden können. Der Konstruktor der Oberklasse kann jedoch innerhalb des Konstruktors der abgeleiteten Klasse mit dem Aufruf super () ausgeführt werden.
Häufig gestellte Fragen
F # 1) Welche Art der Vererbung wird von Java nicht unterstützt?
Antworten: Java unterstützt keine Mehrfachvererbung, da dies zu Problemen in Anwendungen wie dem Diamond-Problem führen kann. Java unterstützt auch keine hybride Vererbung, da es sich um eine Kombination aus einem oder mehreren Vererbungstypen handelt und letztendlich zu einer Mehrfachvererbung führen kann.
F # 2) Welches der Mitglieder der Klasse kann geerbt werden?
Antworten: Eine Klasse kann öffentliche und geschützte Mitglieder ihrer Basisklasse erben, jedoch nicht auf die privaten Mitglieder der Basisklasse zugreifen.
F # 3) Warum ist Mehrfachvererbung nicht zulässig?
Antworten: Mehrfachvererbung führt zu Mehrdeutigkeiten, wenn Klassen mit zwei Elternteilen Methoden mit demselben Prototyp haben. In diesem Fall ist die abgeleitete Klasse nicht eindeutig, von welcher Basisklasse sie die Methode erben soll.
Mehrfachvererbung kann auch zu einem Diamantproblem in Java führen. Daher unterstützt Java keine Mehrfachvererbung.
F # 4) Warum benötigen Sie Mehrfachvererbung?
Antworten: Sprachen wie Java und C # erzwingen die Mehrfachvererbung über mehrere Schnittstellen. Wenn wir also Features von mehr als einer Schnittstelle erben müssen, benötigen wir mehrere Vererbungen.
F # 5) Was ist die Hauptverwendung von Multilevel Inheritance?
Antworten: Eine Klasse, die von einer anderen Klasse abgeleitet ist, die wiederum von einer dritten Klasse abgeleitet ist, soll eine mehrstufige Vererbung aufweisen. Die Ebenen dieser Art der Vererbung können auf eine beliebige Anzahl erweitert werden, solange Klarheit und Einfachheit erhalten bleiben.
Wir können verschiedene Artenebenen mithilfe der mehrstufigen Vererbung darstellen. Wenn wir aus Programmiersicht verschiedene Ebenen von Anwendungsklassen darstellen möchten, entscheiden wir uns für eine mehrstufige Vererbung.
Fazit
In diesem Tutorial haben wir die Vererbungstypen in Java erläutert. Java unterstützt nur einzelne, mehrstufige und hierarchische Vererbungstypen. Java unterstützt keine Mehrfach- und Hybridvererbung. Wir haben das Problem der Mehrfachvererbung und des Diamond-Problems in Java erörtert.
Anschließend haben wir die verschiedenen Regeln besprochen, die wir bei der Implementierung der Vererbung in Java befolgen sollten. Damit haben wir unsere Diskussion über die IS-A-Beziehung in Java abgeschlossen.
=> Sehen Sie sich hier die einfache Java-Schulungsreihe an.
Literatur-Empfehlungen
- Was ist Vererbung in Java - Tutorial mit Beispielen
- Vererbung in C ++
- Arten der Vererbung in C ++
- Java-Grundlagen: Java-Syntax, Java-Klasse und Java-Kernkonzepte
- Java Integer und Java BigInteger Klasse mit Beispielen
- Arten von Klassen in Java: Abstrakt, Konkret, Endgültig, Statisch
- Java-Variablen und ihre Typen mit Beispielen
- Java Scanner Class Tutorial mit Beispielen