Junior
Hoe werkt erfelijkheid in de Swift-taal?
sobes.tech AI
Antwoord van AI
In Swift wordt overerving gerealiseerd via klassen. Een klasse kan eigenschappen en methoden erven van een andere klasse.
- Basisklasse: Klasse waarvan andere klassen erven. Erft niet van een andere klasse.
- Afgeleide klasse (subklasse): Klasse die erft van de basisklasse. Kan nieuwe eigenschappen en methoden toevoegen en geërfde overschrijven.
Belangrijke punten:
- Swift ondersteunt alleen enkelvoudige overerving (een klasse kan slechts van één klasse erven).
- Gebruik van het sleutelwoord
classom een klasse te definiëren. - Gebruik van twee punten
:na de naam van de afgeleide klasse, gevolgd door de naam van de basisklasse. - Methoden en eigenschappen overschrijven met het sleutelwoord
override. - Verbod op overschrijven met het sleutelwoord
finalvoor de definitie van de klasse, methode of eigenschap.
// Basisklasse
class Vehicle {
var currentSpeed = 0.0
func accelerate() {
currentSpeed += 10
}
func description() -> String {
return "reist met \(currentSpeed) mph"
}
}
// Afgeleide klasse
class Car: Vehicle {
var gear = 1
// Methode overschrijven
override func accelerate() {
super.accelerate() // Aanroep van de basisklasse methode
gear += 1
}
// Nieuwe methode toevoegen
func changeGear(to newGear: Int) {
gear = newGear
}
// Eigenschap overschrijven (berekenbaar)
override func description() -> String {
return super.description() + " in versnelling \(gear)"
}
}
// Klasse die niet geërfd mag worden
final class Motorcycle: Vehicle {
// Kan eigen eigenschappen en methoden hebben, maar niet erven
}
Voordelen van overerving:
- Herbruikbaarheid van code: Afgeleide klassen gebruiken functionaliteit van de basisklasse.
- Polymorfisme: Mogelijkheid om met objecten van verschillende afgeleide klassen te werken via een referentie naar de basisklasse.
- Uitbreidbaarheid: Nieuwe functionaliteit toevoegen in afgeleide klassen zonder de basisklasse te wijzigen.
Nadelen van overerving:
- Strakke koppeling: Wijzigingen in de basisklasse kunnen invloed hebben op afgeleide klassen.
- Diamantprobleem (bij meervoudige overerving): Swift heeft dit niet dankzij enkelvoudige overerving.
- Complexiteit van de hiërarchie: Diepe hiërarchieën kunnen moeilijk te begrijpen en te onderhouden zijn.
Swift geeft de voorkeur aan compositie boven overerving om flexibiliteit en hergebruik van code te bereiken, vooral bij het werken met protocollen en extensies. Overerving blijft echter een belangrijk instrument voor het creëren van hiërarchische structuren en het implementeren van objectgeoriënteerde principes.