OOP-Principes Overerving
Veeg om het menu te tonen
Overerving
Laten we het hebben over het OOP-principe - Overerving.
Overerving is een mechanisme waarmee klassen kunnen worden gemaakt op basis van een andere klasse.
- De klasse die als basis dient, wordt de ouder of superklasse genoemd;
- De klasse die is gemaakt op basis van de ouderklasse wordt de kindklasse, subklasse of afstammeling genoemd.
De kindklasse kan dus de kenmerken en eigenschappen van een andere klasse erven - de ouderklasse (haar methoden en variabelen).
Je kunt een klasse erven met het sleutelwoord extends. De syntaxis voor een kindklasse die erft van een ouderklasse ziet er als volgt uit:
Child.java
123class Child extends Parent { // properties and methods }
Laten we een voorbeeld bekijken van hoe overerving werkt in code. We hebben een klasse Bird met bepaalde velden en methoden, en er is een klasse Parrot met zijn eigen velden en methoden. Een papegaai is een vogel, dus logisch gezien zou de papegaai moeten erven van de klasse Bird:
Hier is de code uit de screenshot, herschreven voor betere leesbaarheid en duidelijkheid:
Bird.java
Parrot.java
Main.java
12345678910111213141516171819package animals.birds; public class Bird { public String color; public boolean canFly; public int maxAge; public void eat() { System.out.println("The bird is eating"); } public void fly() { if (canFly) { System.out.println("The bird is flying!"); } else { System.out.println("This bird can't fly :("); } } }
Laten we begrijpen wat er in deze afbeeldingen gebeurt:
- Een klasse
Birdwordt aangemaakt, die in dit geval de bovenliggende klasse is. Deze klasse heeft eigen velden en methoden; - Een klasse
Parrotwordt aangemaakt, die met het sleutelwoordextendserft van de bovenliggende klasseBird. De klasseParrotis een subklasse en heeft eigen velden en methoden. Daarnaast erft de subklasseParrotalle velden en methoden van de bovenliggende klasseBird; - Een object van de klasse
Parrotwordt aangemaakt in demain-methode. Hiermee kunnen de velden van zowel de bovenliggende als de subklasse worden geïnitialiseerd. Eerst worden de velden van de bovenliggende klasseBirdgeïnitialiseerd, daarna de velden van de subklasseParrot. Vervolgens worden de methoden aangeroepen: eerst die van de bovenliggende klasse, daarna die van de subklasse.
Hiermee is overerving toegepast om de klasse Bird te erven.
Waarom doen we dit?
Wanneer er veel verschillende subklassen van Bird zijn, niet alleen Parrot, maar bijvoorbeeld ook Pigeon en Penguin, ontstaan er veel dubbele velden, zoals boolean canFly. Overerving helpt in de eerste plaats om dubbele codefragmenten te vermijden.
Bovendien verbetert het de leesbaarheid aanzienlijk. In de praktijk wordt de klasse Bird en haar subklassen zelden direct gebruikt, maar overerving wordt veel toegepast, vooral bij interfaces.
Opmerking
In het volgende onderdeel van deze cursus leer je meer over interfaces.
Regels voor overerving
-
Slechts één klasse erven. Java ondersteunt geen meervoudige overerving. Eén klasse kan slechts één bovenliggende klasse hebben;
-
Alles wordt overgeërfd behalve
privatevariabelen en methoden.
Opmerking
Je kunt niet van jezelf erven!
Eerder werd vermeld dat een subklasse toegang heeft tot alle variabelen en methoden van de bovenliggende klasse. Dat is echter niet helemaal waar.
In werkelijkheid zijn alle methoden en variabelen met de private modifier niet toegankelijk voor de subklasse.
- Overschrijven van een methode van de bovenliggende klasse.
Stel dat een klasse wordt geërfd, maar bepaalde delen van de overgeërfde code niet gewenst zijn. Bijvoorbeeld wanneer een specifieke methode anders moet werken dan in de bovenliggende klasse.
Om een methode van de bovenliggende klasse te overschrijven, wordt @Override erboven geplaatst:
Parrot.java
1234@Override public void eat() { System.out.println("The parrot is eating"); }
In de bovenstaande code hebben we de methode van de ouder-klasse overschreven, en nu zal, wanneer deze methode vanuit de kind-klasse wordt aangeroepen, de overschreven methode worden uitgevoerd!
- Overerving voorkomen.
Als u niet wilt dat iemand uw klasse erft, gebruik dan de final-modifier ervoor.
Bijvoorbeeld:
Bird.java
Parrot.java
123public final class Bird { // fields and methods }
Op deze manier hebben we met het sleutelwoord final de overerving van de klasse Bird verboden.
Dit zijn slechts de basisregels en kenmerken van overerving. Het is een uitgebreid onderwerp dat je zeer vaak zult gebruiken. Gedurende de cursus maak je kennis met andere aspecten van overerving en zul je deze vaker toepassen.
1. Waarom hebben we overerving nodig in Java?
2. Van hoeveel klassen kunnen we tegelijk erven?
3. Hoe kunnen we overerving in Java voorkomen?
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.