Wat zijn erfelijkheid en polymorfisme in de context van referentietypen?
sobes.tech AI
Antwoord van AI
Overerving is een mechanisme waarmee je een nieuwe klasse (afgeleid, dochter) kunt maken die de velden en methoden van een bestaande klasse (basis, ouder) erft. Dit bevordert hergebruik van code en het creëren van klassendiagrammen.
Polymorfisme is de mogelijkheid dat objecten van verschillende klassen zich op een uniforme manier gedragen of verschillende gedragingen vertonen bij het aanroepen van dezelfde methode. Er zijn twee hoofdtypen: statisch (method overloading) en dynamisch (method overriding).
In de context van referentietypen, stelt overerving je in staat om een variabele van de basisklasse te maken die kan verwijzen naar een object van de afgeleide klasse. Bij het aanroepen van een methode via zo'n variabele wordt de versie van de methode van het werkelijke type van het object uitgevoerd, niet van het referentietype (dynamisch polymorfisme).
Voorbeeld in Java:
// Basisklasse
class Animal {
public void makeSound() {
System.out.println("Maakt geluid");
}
}
// Afgeleide klasse 1
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Woef woef");
}
}
// Afgeleide klasse 2
class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Miauw miauw");
}
}
class Main {
public static void main(String[] args) {
Animal myDog = new Dog(); // Variabele van type Animal die verwijst naar een Dog-object
Animal myCat = new Cat(); // Variabele van type Animal die verwijst naar een Cat-object
myDog.makeSound(); // Roept de methode van Dog aan (polymorfisme)
myCat.makeSound(); // Roept de methode van Cat aan (polymorfisme)
}
}
In dit voorbeeld hebben myDog en myCat referentietypen Animal, maar dankzij polymorfisme wordt bij het aanroepen van makeSound() de juiste implementatie van Dog en Cat uitgevoerd.