logo

Erfenis op Java

  1. Erfenis
  2. Soorten erfenis
  3. Waarom is meervoudige overerving niet mogelijk in Java in het geval van klasse?

Erfenis op Java is een mechanisme waarbij één object alle eigenschappen en gedragingen van een ouderobject verwerft. Het is een belangrijk onderdeel van OOP's (Objectgeoriënteerd programmeersysteem).

Het idee achter overerving in Java is dat je nieuwe kunt creëren klassen die voortbouwen op bestaande klassen. Wanneer u overerft van een bestaande klasse, kunt u methoden en velden van de bovenliggende klasse opnieuw gebruiken. Bovendien kunt u ook nieuwe methoden en velden aan uw huidige klasse toevoegen.

Erfenis vertegenwoordigt de IS-A-relatie die ook bekend staat als een ouder-kind relatie.

Waarom overerving in Java gebruiken?

Termen die worden gebruikt in de erfenis

    Klas:Een klasse is een groep objecten die gemeenschappelijke eigenschappen hebben. Het is een sjabloon of blauwdruk waaruit objecten worden gemaakt.Subklasse/kinderklasse:Subklasse is een klasse die de andere klasse erft. Het wordt ook wel een afgeleide klasse, uitgebreide klasse of kindklasse genoemd.Superklasse/Ouderklasse:Superklasse is de klasse waarvan een subklasse de kenmerken overerft. Het wordt ook wel een basisklasse of een bovenliggende klasse genoemd.Herbruikbaarheid:Zoals de naam aangeeft, is herbruikbaarheid een mechanisme waarmee u de velden en methoden van de bestaande klasse opnieuw kunt gebruiken wanneer u een nieuwe klasse maakt. U kunt dezelfde velden en methoden gebruiken die al in de vorige klasse zijn gedefinieerd.

De syntaxis van Java-overerving

 class Subclass-name extends Superclass-name { //methods and fields } 

De breidt trefwoord uit geeft aan dat u een nieuwe klasse maakt die is afgeleid van een bestaande klasse. De betekenis van 'uitbreiden' is het vergroten van de functionaliteit.

afdrukarray in Java

In de terminologie van Java wordt een klasse die wordt geërfd een ouder- of superklasse genoemd, en de nieuwe klasse wordt een kind- of subklasse genoemd.


Voorbeeld van Java-overerving

Erfenis op Java

Zoals weergegeven in de bovenstaande afbeelding, is Programmer de subklasse en is Employee de superklasse. De relatie tussen de twee klassen is Programmeur IS-A Medewerker . Het betekent dat Programmeur een type Werknemer is.

beperkingen van elektronisch bankieren
 class Employee{ float salary=40000; } class Programmer extends Employee{ int bonus=10000; public static void main(String args[]){ Programmer p=new Programmer(); System.out.println('Programmer salary is:'+p.salary); System.out.println('Bonus of Programmer is:'+p.bonus); } } 
Test het nu
 Programmer salary is:40000.0 Bonus of programmer is:10000 

In het bovenstaande voorbeeld heeft het Programmer-object toegang tot het veld van zowel de eigen klasse als de klasse Werknemer, d.w.z. herbruikbaarheid van code.


Soorten overerving in Java

Op basis van klasse kunnen er drie soorten overerving in Java zijn: single, multilevel en hiërarchisch.

Bij Java-programmering wordt meervoudige en hybride overerving alleen via de interface ondersteund. Over interfaces zullen we later leren.

Soorten overerving op Java

Opmerking: Meervoudige overerving wordt niet ondersteund in Java via klasse.

Wanneer één klasse meerdere klassen erft, staat dit bekend als meervoudige overerving. Bijvoorbeeld:

Meervoudige overerving in Java

Voorbeeld van enkele erfenis

Wanneer een klasse een andere klasse erft, staat dit bekend als a enkele erfenis . In het onderstaande voorbeeld erft de klasse Dog de klasse Animal, dus er is sprake van een enkele overerving.

mooiste glimlach

Bestand: TestInheritance.java

 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class TestInheritance{ public static void main(String args[]){ Dog d=new Dog(); d.bark(); d.eat(); }} 

Uitgang:

 barking... eating... 

Voorbeeld van overerving op meerdere niveaus

Wanneer er sprake is van een keten van overerving, heet dit overerving op meerdere niveaus . Zoals je in het onderstaande voorbeeld kunt zien, erft de klasse BabyDog de klasse Dog, die weer de klasse Animal erft, dus er is sprake van overerving op meerdere niveaus.

Bestand: TestInheritance2.java

 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class BabyDog extends Dog{ void weep(){System.out.println('weeping...');} } class TestInheritance2{ public static void main(String args[]){ BabyDog d=new BabyDog(); d.weep(); d.bark(); d.eat(); }} 

Uitgang:

 weeping... barking... eating... 

Voorbeeld van hiërarchische erfenis

Wanneer twee of meer klassen één klasse erven, staat dit bekend als hiërarchische erfenis . In het onderstaande voorbeeld erven de klassen Dog en Cat de klasse Animal, dus er is sprake van hiërarchische overerving.

Bestand: TestInheritance3.java

Hoe de applicatie zichtbaar te maken in Android
 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class Cat extends Animal{ void meow(){System.out.println('meowing...');} } class TestInheritance3{ public static void main(String args[]){ Cat c=new Cat(); c.meow(); c.eat(); //c.bark();//C.T.Error }} 

Uitgang:

 meowing... eating... 

V) Waarom wordt meervoudige overerving niet ondersteund in Java?

Om de complexiteit te verminderen en de taal te vereenvoudigen, wordt meervoudige overerving niet ondersteund in Java.

Beschouw een scenario waarin A, B en C drie klassen zijn. De C-klasse erft de A- en B-klassen. Als klassen A en B dezelfde methode hebben en u deze aanroept vanuit een onderliggend klasseobject, zal er onduidelijkheid bestaan ​​over het aanroepen van de methode van klasse A of B.

Omdat compilatiefouten beter zijn dan runtimefouten, geeft Java een compilatiefout weer als u twee klassen erft. Dus of u nu dezelfde of een andere methode gebruikt, er zal een compileerfout optreden.

 class A{ void msg(){System.out.println('Hello');} } class B{ void msg(){System.out.println('Welcome');} } class C extends A,B{//suppose if it were public static void main(String args[]){ C obj=new C(); obj.msg();//Now which msg() method would be invoked? } } 
Test het nu
 Compile Time Error