Java-erfenis
Java-erfenis
In deze zelfstudie leren we over Java-overerving en zijn typen met behulp van voorbeelden.
Overerving is een van de belangrijkste kenmerken van OOP waarmee we een nieuwe klasse kunnen maken van een bestaande klasse.
De nieuwe klasse die wordt gemaakt, staat bekend als subklasse (kind of afgeleide klasse) en de bestaande klasse waarvan de onderliggende klasse is afgeleid, staat bekend als superklasse (ouder- of basisklasse).
De extends
sleutelwoord wordt gebruikt om overerving in Java uit te voeren. Bijvoorbeeld,
class Animal {
// methods and fields
}
// use of extends keyword
// to perform inheritance
class Dog extends Animal {
// methods and fields of Animal
// methods and fields of Dog
}
In het bovenstaande voorbeeld is de Hond klasse wordt gemaakt door de methoden en velden over te nemen van de Animal klasse.
Hier, Hond is de subklasse en Animal is de superklasse.
Voorbeeld 1:Java-erfenis
class Animal {
// field and method of the parent class
String name;
public void eat() {
System.out.println("I can eat");
}
}
// inherit from Animal
class Dog extends Animal {
// new method in subclass
public void display() {
System.out.println("My name is " + name);
}
}
class Main {
public static void main(String[] args) {
// create an object of the subclass
Dog labrador = new Dog();
// access field of superclass
labrador.name = "Rohu";
labrador.display();
// call method of superclass
// using object of subclass
labrador.eat();
}
}
Uitvoer
My name is Rohu I can eat
In het bovenstaande voorbeeld hebben we een subklasse afgeleid Hond van superklasse Dier . Let op de uitspraken,
labrador.name = "Rohu";
labrador.eat();
Hier, labrador is een object van Hond . Echter, naam en eat()
zijn de leden van de Animal klasse.
Sinds Hond neemt het veld en de methode over van Animal , hebben we toegang tot het veld en de methode met behulp van het object van de Hond .

is-een relatie
In Java is overerving een is-a relatie. Dat wil zeggen, we gebruiken alleen overerving als er een is-a-relatie bestaat tussen twee klassen. Bijvoorbeeld,
- Auto is een Voertuig
- Oranje is een Fruit
- Chirurg is een Dokter
- Hond is een dier
Hier, Auto kan erven van Voertuig , Oranje kan erven van Fruit , enzovoort.
Methode overschrijven in Java-overerving
In Voorbeeld 1 , zien we dat het object van de subklasse toegang heeft tot de methode van de superklasse.
Als dezelfde methode echter aanwezig is in zowel de superklasse als de subklasse, wat gebeurt er dan?
In dit geval overschrijft de methode in de subklasse de methode in de superklasse. Dit concept staat in Java bekend als methode-override.
Voorbeeld 2:Methode overschrijven in Java Inheritance
class Animal {
// method in the superclass
public void eat() {
System.out.println("I can eat");
}
}
// Dog inherits Animal
class Dog extends Animal {
// overriding the eat() method
@Override
public void eat() {
System.out.println("I eat dog food");
}
// new method in subclass
public void bark() {
System.out.println("I can bark");
}
}
class Main {
public static void main(String[] args) {
// create an object of the subclass
Dog labrador = new Dog();
// call the eat() method
labrador.eat();
labrador.bark();
}
}
Uitvoer
I eat dog food I can bark
In het bovenstaande voorbeeld is de eat()
methode is aanwezig in zowel de superklasse Animal en de subklasse Hond .
Hier hebben we een object labrador . gemaakt van Hond .
Als we nu eat()
call bellen met behulp van het object labrador , de methode binnen Hond wordt genoemd. Dit komt omdat de methode binnen de afgeleide klasse de methode binnen de basisklasse overschrijft.
Dit wordt methode-overriding genoemd. Ga voor meer informatie naar Java Method Overriding.
Opmerking :We hebben de @Override
. gebruikt annotatie om de compiler te vertellen dat we een methode overschrijven. De annotatie is echter niet verplicht. Ga voor meer informatie naar Java-annotaties.
super-zoekwoord in Java-overerving
Eerder zagen we dat dezelfde methode in de subklasse de methode in de superklasse overschrijft.
In een dergelijke situatie zal de super
trefwoord wordt gebruikt om de methode van de bovenliggende klasse aan te roepen vanuit de methode van de onderliggende klasse.
Voorbeeld 3:superzoekwoord in overerving
class Animal {
// method in the superclass
public void eat() {
System.out.println("I can eat");
}
}
// Dog inherits Animal
class Dog extends Animal {
// overriding the eat() method
@Override
public void eat() {
// call method of superclass
super.eat();
System.out.println("I eat dog food");
}
// new method in subclass
public void bark() {
System.out.println("I can bark");
}
}
class Main {
public static void main(String[] args) {
// create an object of the subclass
Dog labrador = new Dog();
// call the eat() method
labrador.eat();
labrador.bark();
}
}
Uitvoer
I can eat I eat dog food I can bark
In het bovenstaande voorbeeld is de eat()
methode is aanwezig in zowel de basisklasse Animal en de afgeleide klasse Hond . Let op de verklaring,
super.eat();
Hier, de super
trefwoord wordt gebruikt om de eat()
. aan te roepen methode aanwezig in de superklasse.
We kunnen ook de super
. gebruiken sleutelwoord om de constructor van de superklasse aan te roepen vanuit de constructor van de subklasse. Ga voor meer informatie naar Java-superzoekwoord.
beschermde leden in erfenis
In Java, als een klasse protected
. bevat velden en methoden, dan zijn deze velden en methoden toegankelijk vanuit de subklasse van de klasse.
Voorbeeld 4:beschermde leden in erfenis
class Animal {
protected String name;
protected void display() {
System.out.println("I am an animal.");
}
}
class Dog extends Animal {
public void getInfo() {
System.out.println("My name is " + name);
}
}
class Main {
public static void main(String[] args) {
// create an object of the subclass
Dog labrador = new Dog();
// access protected field and method
// using the object of subclass
labrador.name = "Rocky";
labrador.display();
labrador.getInfo();
}
}
Uitvoer
I am an animal. My name is Rocky
In het bovenstaande voorbeeld hebben we een klasse gemaakt met de naam Animal. De klasse bevat een beveiligd veld:naam en een methode:display()
.
We hebben de Hond . geërfd klasse erft Dier . Let op de verklaring,
labrador.name = "Rocky";
labrador.display();
Hier hebben we toegang tot het beveiligde veld en de methode van de superklasse met behulp van de labrador object van de subklasse.
Waarom overerving gebruiken?
- Het belangrijkste gebruik van overerving in Java is herbruikbaarheid van code. De code die aanwezig is in de bovenliggende klasse kan direct worden gebruikt door de onderliggende klasse.
- Het overschrijven van methoden is ook bekend als runtime-polymorfisme. Daarom kunnen we polymorfisme in Java bereiken met behulp van overerving.
Soorten overerving
Er zijn vijf soorten overerving.
1. Enkele erfenis
Bij enkele overerving strekt een enkele subklasse zich uit van een enkele superklasse. Bijvoorbeeld,

2. Overerving op meerdere niveaus
Bij overerving op meerdere niveaus breidt een subklasse zich uit van een superklasse en vervolgens fungeert dezelfde subklasse als een superklasse voor een andere klasse. Bijvoorbeeld,

3. Hiërarchische overerving
Bij hiërarchische overerving strekken meerdere subklassen zich uit van een enkele superklasse. Bijvoorbeeld,

4. Meerdere overerving
Bij meervoudige overerving strekt een enkele subklasse zich uit van meerdere superklassen. Bijvoorbeeld,

Opmerking :Java ondersteunt geen meervoudige overerving. We kunnen echter meerdere overerving bereiken met behulp van interfaces. Ga voor meer informatie naar Java implementeert meervoudige overerving.
5. Hybride overerving
Hybride overerving is een combinatie van twee of meer soorten overerving. Bijvoorbeeld,

Hier hebben we hiërarchische en meervoudige overerving gecombineerd om een hybride overerving te vormen.
Java