logo

Soorten erfenis op Java

Erfenis is de krachtigste eigenschap van objectgeoriënteerd programmeren. Het stelt ons in staat om de eigenschappen van de ene klasse over te nemen naar een andere klasse. In deze sectie zullen we bespreken soorten overerving op Java diepgaand met praktijkvoorbeelden. We zullen ook Java-programma's maken om het concept van verschillende soorten overerving te implementeren.

Erfenis

Erfenis is een mechanisme om een ​​nieuwe klasse uit een bestaande klasse te drijven. De bestaande (oude) klasse staat bekend als basisklasse of superklasse of ouder klasse . De nieuwe klasse staat bekend als a afgeleide klasse of subklasse of kind klasse . Hiermee kunnen we de eigenschappen en het gedrag van de ene klasse (ouder) in een andere klasse (kind) gebruiken.

Een klasse waarvan de eigenschappen worden geërfd, staat bekend als ouder klasse en een klasse die de eigenschappen van de bovenliggende klasse erft, staat bekend als kind klasse . Het brengt dus een relatie tot stand tussen ouder- en kindklasse die bekend staat als ouder-kind of Is een relatie.

discrete wiskunde-ontkenning

Stel dat er twee klassen worden genoemd Vader En Kind en we willen de eigenschappen van de klasse Father in de klasse Child erven. Dit kunnen wij bereiken door gebruik te maken van de strekt zich uit trefwoord.

 //inherits the properties of the Father class class Child extends Father { //functionality } 

Soorten erfenis op Java

Wanneer moeten we overerving gebruiken?

Erfenis biedt de herbruikbaarheid van code, vooral als er een grote hoeveelheid code is die hergebruikt kan worden. Het legt ook de relatie tussen verschillende klassen vast, die bekend staat als a Is een relatie. We kunnen het ook gebruiken als we iets willen bereiken methode overschrijven .

Punten om te onthouden

  • Constructor kan niet worden overgenomen in Java.
  • Privéleden worden niet geërfd op Java.
  • Cyclische overerving is niet toegestaan ​​op Java.
  • Wijs bovenliggende verwijzingen toe aan onderliggende objecten.
  • Constructors worden uitgevoerd vanwege super() dat aanwezig is in de constructor.

Soorten erfenis

Java ondersteunt de volgende vier soorten overerving:

  • Enkelvoudige erfenis
  • Overerving op meerdere niveaus
  • Hiërarchische erfenis
  • Hybride erfenis
Soorten erfenis op Java

Opmerking: Meervoudige overerving wordt niet ondersteund in Java.

Laten we elk bespreken met het juiste voorbeeld.

Enkelvoudige erfenis

Bij enkele overerving wordt een subklasse afgeleid van slechts één superklasse. Het erft de eigenschappen en het gedrag van een eenouderklasse. Soms wordt het ook wel genoemd eenvoudige erfenis .

Soorten erfenis op Java

In de bovenstaande afbeelding is Employee een bovenliggende klasse en Executive een onderliggende klasse. De Executive-klasse erft alle eigenschappen van de Employee-klasse.

Laten we het enkele overervingsmechanisme in een Java-programma implementeren.

Executive.java

 class Employee { float salary=34534*12; } public class Executive extends Employee { float bonus=3000*6; public static void main(String args[]) { Executive obj=new Executive(); System.out.println('Total salary credited: '+obj.salary); System.out.println('Bonus of six months: '+obj.bonus); } } 

Uitgang:

 Total salary credited: 414408.0 Bonus of six months: 18000.0 

Overerving op meerdere niveaus

In overerving op meerdere niveaus , een klasse is afgeleid van een klasse die ook is afgeleid van een andere klasse, wordt overerving op meerdere niveaus genoemd. In eenvoudige bewoordingen kunnen we zeggen dat een klasse die meer dan één ouderklasse heeft, overerving op meerdere niveaus wordt genoemd. Houd er rekening mee dat de lessen op verschillende niveaus moeten zijn. Er bestaat dus een enkele basisklasse en een enkele afgeleide klasse, maar meerdere tussenliggende basisklassen.

een arraylist-java sorteren
Soorten erfenis op Java

In de bovenstaande afbeelding erft de klasse Marks de leden of methoden van de klasse Students. De klasse Sports erft de leden van de klasse Marks. Daarom is de klasse Student de ouderklasse van de klasse Marks en is de klasse Marks de ouderklasse van de klasse Sports. Daarom erft de klasse Sports impliciet de eigenschappen van de Student, samen met de klasse Marks.

Laten we het overervingsmechanisme op meerdere niveaus implementeren in een Java-programma.

MultilevelInheritanceExample.java

 //super class class Student { int reg_no; void getNo(int no) { reg_no=no; } void putNo() { System.out.println('registration number= '+reg_no); } } //intermediate sub class class Marks extends Student { float marks; void getMarks(float m) { marks=m; } void putMarks() { System.out.println('marks= '+marks); } } //derived class class Sports extends Marks { float score; void getScore(float scr) { score=scr; } void putScore() { System.out.println('score= '+score); } } public class MultilevelInheritanceExample { public static void main(String args[]) { Sports ob=new Sports(); ob.getNo(0987); ob.putNo(); ob.getMarks(78); ob.putMarks(); ob.getScore(68.7); ob.putScore(); } } 

Uitgang:

 registration number= 0987 marks= 78.0 score= 68.7 

Hiërarchische erfenis

Als een aantal klassen zijn afgeleid van een enkele basisklasse, wordt deze aangeroepen hiërarchische erfenis .

Soorten erfenis op Java

In de bovenstaande afbeelding erven de klassen Wetenschap, Handel en Kunst een enkele ouderklasse met de naam Student.

Laten we het hiërarchische overervingsmechanisme in een Java-programma implementeren.

HiërarchischInheritanceExample.java

 //parent class class Student { public void methodStudent() { System.out.println('The method of the class Student invoked.'); } } class Science extends Student { public void methodScience() { System.out.println('The method of the class Science invoked.'); } } class Commerce extends Student { public void methodCommerce() { System.out.println('The method of the class Commerce invoked.'); } } class Arts extends Student { public void methodArts() { System.out.println('The method of the class Arts invoked.'); } } public class HierarchicalInheritanceExample { public static void main(String args[]) { Science sci = new Science(); Commerce comm = new Commerce(); Arts art = new Arts(); //all the sub classes can access the method of super class sci.methodStudent(); comm.methodStudent(); art.methodStudent(); } } 

Uitgang:

 The method of the class Student invoked. The method of the class Student invoked. The method of the class Student invoked. 

Hybride erfenis

Hybride middelen bestaan ​​uit meer dan één. Hybride overerving is de combinatie van twee of meer soorten overerving.

Soorten erfenis op Java

In de bovenstaande figuur is GrandFather een superklasse. De Father-klasse erft de eigenschappen van de GrandFather-klasse. Omdat Vader en Grootvader een enkele erfenis vertegenwoordigen. Verder wordt de vaderklasse geërfd door de zoon- en dochterklasse. Zo wordt de Vader de ouderklasse voor Zoon en Dochter. Deze klassen vertegenwoordigen de hiërarchische erfenis. Gecombineerd duidt het de hybride erfenis aan.

Laten we het hybride overervingsmechanisme implementeren in een Java-programma.

chromen adresbalk

Dochter.java

 //parent class class GrandFather { public void show() { System.out.println('I am grandfather.'); } } //inherits GrandFather properties class Father extends GrandFather { public void show() { System.out.println('I am father.'); } } //inherits Father properties class Son extends Father { public void show() { System.out.println('I am son.'); } } //inherits Father properties public class Daughter extends Father { public void show() { System.out.println('I am a daughter.'); } public static void main(String args[]) { Daughter obj = new Daughter(); obj.show(); } } 

Uitgang:

 I am daughter. 

Meervoudige overerving (niet ondersteund)

Java ondersteunt geen meerdere overervingen vanwege onduidelijkheid. Beschouw bijvoorbeeld het volgende Java-programma.

Demo.java

 class Wishes { void message() { System.out.println('Best of Luck!!'); } } class Birthday { void message() { System.out.println('Happy Birthday!!'); } } public class Demo extends Wishes, Birthday //considering a scenario { public static void main(String args[]) { Demo obj=new Demo(); //can't decide which classes' message() method will be invoked obj.message(); } } 

De bovenstaande code geeft een fout omdat de compiler niet kan beslissen welke message() -methode moet worden aangeroepen. Om deze reden ondersteunt Java geen meerdere overervingen op klasseniveau, maar kan dit worden bereikt via een koppel .