Overerving stelt een klasse (de subklasse of ) in staat velden en methoden van een andere klasse (de of ) opnieuw te gebruiken en uit te breiden. Het modelleert een relatie: een .
Overerving stelt een klasse (de subklasse of ) in staat velden en methoden van een andere klasse (de of ) opnieuw te gebruiken en uit te breiden. Het modelleert een relatie: een .
DogAnimalclass Animal:
def __init__(self, name):
self.name = name
def eat(self):
return f"{self.name} is eating"
class Dog(Animal): # Dog inherits everything from Animal
def bark(self): # ...and adds new behavior
return "Woof!"
d = Dog("Rex")
print(d.eat()) # "Rex is eating" → inherited, not rewritten
print(d.bark()) # "Woof!" → Dog-specific
Dog kreeg __init__ en eat gratis en voegde bark toe. Een subklasse kan ook overgeërfde methoden override om het gedrag te veranderen.
| Voordeel | Risico |
|---|---|
| Gedeelde code hergebruiken | Strakke koppeling aan de ouderklasse |
| Echte hiërarchieën modelleren | Fragiele basisklasse — wijzigingen in ouder breken kinderen |
| Polymorfisme via een gemeenschappelijk type | Diepe bomen worden moeilijk te volgen |
Een veelgebruikt richtlijn: geef compositie de voorkeur boven overerving wanneer de relatie echt "has-a" is, niet "is-a".
Overerving is de meest misbruikte OOP-functie: het is verleidelijk om deze alleen voor code delen te gebruiken, wat onverwante klassen strak koppelt.
Correct gebruikt — alleen voor echte is-a relaties — geeft het je hergebruik plus polymorfisme, waardoor je veel subtypes uniform kunt behandelen via hun gemeenschappelijke ouder.
Een bibliotheek met IT-sollicitatievragen met gedetailleerde antwoorden — van Junior tot Senior.
Doneren