In deze zelfstudie leren we met behulp van voorbeelden over Java-overerving en de typen ervan.
Overerving is een van de belangrijkste kenmerken van OOP waarmee we een nieuwe klasse kunnen maken op basis van een bestaande klasse.
De nieuwe klasse die wordt gemaakt, staat bekend als subklasse (onderliggende of afgeleide klasse) en de bestaande klasse waarvan de onderliggende klasse is afgeleid, staat bekend als superklasse (bovenliggende of basisklasse).
Het 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 wordt de klasse Dog gemaakt door de methoden en velden van de klasse Animal te erven.
Hier is Dog de subklasse en Animal is de superklasse.
Voorbeeld 1: Java-overerving
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
Mijn naam is Rohu, ik kan eten
In het bovenstaande voorbeeld hebben we een subklasse Dog afgeleid van superklasse Animal. Let op de verklaringen,
labrador.name = "Rohu"; labrador.eat();
Hier is labrador een voorwerp van Dog. Noem en eat()
zijn echter de leden van de klasse Animal.
Omdat Dog het veld en de methode van Animal erft, hebben we toegang tot het veld en de methode met behulp van het object van de Dog.

is een relatie
In Java is overerving een is-a- relatie. Dat wil zeggen, we gebruiken overerving alleen als er een is-a-relatie bestaat tussen twee klassen. Bijvoorbeeld,
- Auto is een voertuig
- Oranje is een vrucht
- Chirurg is een dokter
- Hond is een dier
Hier kan Auto 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 in zowel de superklasse als de subklasse aanwezig is, 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-overschrijving.
Voorbeeld 2: Methode overschrijven in Java 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() ( 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
Ik eet hondenvoer dat ik kan blaffen
In het bovenstaande voorbeeld is de eat()
methode aanwezig in zowel de superklasse Animal als de subklasse Dog.
Hier hebben we een object labrador van de hond gemaakt.
Als we nu eat()
het object labrador aanroepen , wordt de methode binnen Dog genoemd. Dit komt doordat de methode binnen de afgeleide klasse de methode binnen de basisklasse overschrijft.
Dit wordt het overschrijven van een methode genoemd. Ga voor meer informatie naar Java Method Overriding.
Opmerking : we hebben de @Override
annotatie gebruikt om de compiler te vertellen dat we een methode overschrijven. De annotatie is echter niet verplicht. Bezoek Java-annotaties voor meer informatie.
super sleutelwoord in Java Overerving
Eerder zagen we dat dezelfde methode in de subklasse de methode in de superklasse overschrijft.
In een dergelijke situatie wordt het super
sleutelwoord gebruikt om de methode van de bovenliggende klasse aan te roepen vanuit de methode van de onderliggende klasse.
Voorbeeld 3: super sleutelwoord 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
Ik kan eten Ik eet hondenvoer dat ik kan blaffen
In het bovenstaande voorbeeld is de eat()
methode aanwezig in zowel de basisklasse Animal als de afgeleide klasse Dog. Let op de verklaring,
super.eat();
Hier wordt het super
sleutelwoord gebruikt om de eat()
methode aan te roepen die aanwezig is in de superklasse.
We kunnen het super
sleutelwoord ook gebruiken 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
Als een klasse in Java protected
velden en methoden bevat, zijn deze velden en methoden toegankelijk vanuit de subklasse van de klasse.
Example 4: protected Members in Inheritance
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(); ) )
Output
I am an animal. My name is Rocky
In the above example, we have created a class named Animal. The class includes a protected field: name and a method: display()
.
We have inherited the Dog class inherits Animal. Notice the statement,
labrador.name = "Rocky"; labrador.display();
Here, we are able to access the protected field and method of the superclass using the labrador object of the subclass.
Why use inheritance?
- The most important use of inheritance in Java is code reusability. The code that is present in the parent class can be directly used by the child class.
- Method overriding is also known as runtime polymorphism. Hence, we can achieve Polymorphism in Java with the help of inheritance.
Types of inheritance
There are five types of inheritance.
1. Single Inheritance
Bij een enkele overerving strekt een enkele subklasse zich uit van een enkele superklasse. Bijvoorbeeld,

2. Overerving op meerdere niveaus
Bij overerving op meerdere niveaus strekt 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 meerdere 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.