Java-overerving (met voorbeelden)

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 extendssleutelwoord 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.

Implementatie van Java-overerving

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 @Overrideannotatie 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 supersleutelwoord 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 supersleutelwoord gebruikt om de eat()methode aan te roepen die aanwezig is in de superklasse.

We kunnen het supersleutelwoord 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 protectedvelden 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,

Java Single Inheritance

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,

Overerving op meerdere niveaus

3. Hiërarchische overerving

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

Hiërarchische overerving van Java

4. Meerdere overerving

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

Java meervoudige overerving

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,

Java hybride overerving

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

Interessante artikelen...