Cursusinhoud
Java OOP
Java OOP
OOP-Principes: Overerving
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 ouderklasse of superklasse genoemd;
De klasse die is gemaakt op basis van de ouderklasse, wordt de kindklasse, subklasse of afgeleide klasse genoemd.
Hierdoor kan de kindklasse 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
class 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
package 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:
We maken een klasse
Bird
, die in dit geval de bovenliggende klasse is. Deze klasse heeft zijn eigen velden en methoden;We maken een klasse
Parrot
, die het sleutelwoordextends
gebruikt om te erven van de bovenliggende klasseBird
. De klasseParrot
is een subklasse en heeft eigen velden en methoden. Daarnaast erft de subklasseParrot
alle velden en methoden van de bovenliggende klasseBird
;We maken een object van de klasse
Parrot
in demain
-methode en zien dat we de velden van zowel de bovenliggende als de subklasse kunnen initialiseren. Eerst initialiseren we de velden van de bovenliggende klasseBird
, daarna de velden van de subklasseParrot
. Vervolgens roepen we de methoden aan: eerst die van de bovenliggende klasse, daarna de methode van de subklasse.
Op deze manier hebben we overerving gebruikt om de klasse Bird
te erven.
Waarom doen we dit?
Wanneer we veel verschillende subklassen van Bird
hebben, niet alleen Parrot
, maar bijvoorbeeld ook Pigeon
en Penguin
, zullen er veel gedupliceerde velden zijn, zoals boolean canFly
. Het eerste voordeel van overerving is het voorkomen van gedupliceerde codefragmenten.
Bovendien verbetert het de leesbaarheid aanzienlijk. In de praktijk kom je de klasse Bird
en zijn subklassen zelden direct tegen, maar overerving wordt vaak gebruikt, vooral met interfaces.
Opmerking
Je leert over interfaces in het volgende onderdeel van deze cursus.
Regels voor overerving
Erft slechts één klasse. Java ondersteunt geen meervoudige overerving. Een klasse kan slechts één bovenliggende klasse hebben;
Alles wordt geërfd behalve
private
variabelen en methoden.
Opmerking
Je kunt niet van jezelf erven!
Eerder heb ik 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.
Overschrijf de methode van de bovenliggende klasse.
Stel je voor dat we een klasse erven, maar dat bepaalde delen van de geërfde code niet naar wens zijn. Stel dat we willen dat een specifieke methode anders werkt dan in de bovenliggende klasse.
Om een methode van de bovenliggende klasse te overschrijven, schrijven we @Override
erboven:
Parrot.java
@Override public void eat() { System.out.println("The parrot is eating"); }
In de bovenstaande code hebben we de methode van de ouderklasse overschreven, en nu zal bij het aanroepen van deze methode vanuit de kindklasse 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
public 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!