Héritage en Swift
Introduction à l'héritage
L'héritage est un concept central dans la programmation orientée objet qui permet de transférer des propriétés, des méthodes et d'autres caractéristiques d'une classe à une autre. Cette fonctionnalité unique distingue les classes des autres types de données en Swift.
Classes Parent et Enfant
Lorsqu'une classe hérite d'une autre, elle est appelée classe enfant ou sous-classe. La classe dont elle hérite est appelée classe parente ou superclasse.
Syntaxe de l'héritage
Pour qu'une classe puisse hériter d'une autre, la syntaxe suivante est utilisée :
class SuperClass {
// Définition de la superclasse ici
}
class SubClass: SuperClass {
// Définition de la sous-classe ici
}
La sous-classe héritera de toutes les propriétés et méthodes de la superclasse, tout en pouvant également définir ses propres éléments.
Exemple d'héritage
Prenons un exemple simple avec une classe nommée Car
qui possède une variable topSpeed
initialisée à 200 et une méthode drive()
:
class Car {
var topSpeed = 200
func drive() {
print("Driving")
}
}
Une autre classe peut hériter de Car
comme ceci :
class Jeep: Car {
// Création d'une nouvelle propriété
var currentNumberOfMiles = 0
}
On peut instancier un objet de type Jeep
de cette manière :
let wrangler = Jeep()
Les propriétés peuvent être accédées ou modifiées comme suit :
wrangler.topSpeed = 100
print(wrangler.topSpeed) // Output: 100
wrangler.currentNumberOfMiles = 300
print(wrangler.currentNumberOfMiles) // Output: 300
Surcharge des méthodes
Il est possible de redéfinir un méthode de la superclasse dans la sous-classe grâce au mot clé override
. Prenons un autre exemple avec une sous-classe Tesla
de Car
:
class Tesla: Car {
override func drive() {
print("Driving very quietly")
}
}
Lorsqu'on crée une instance de Tesla
et qu'on appelle la méthode drive()
, l'implémentation redéfinie sera utilisée :
let modelY = Tesla()
modelY.drive() // Output: Driving very quietly
Accès aux méthodes de la superclasse
Si vous avez besoin d'accéder à la version de la méthode de la superclasse après l'avoir redéfinie, vous pouvez utiliser le mot clé super
:
class Tesla: Car {
override func drive() {
super.drive() // Appelle la méthode de la superclasse
print("Driving very quietly")
}
}
En appelant modelY.drive()
, vous obtiendrez :
Driving
Driving very quietly
Prévenir la surcharge
Pour empêcher la redéfinition d'une méthode, vous pouvez utiliser le mot clé final
lors de la déclaration de la méthode dans la superclasse. Par exemple :
class Car {
var topSpeed = 200
final func drive() {
print("Driving")
}
}
class Tesla: Car {
override func drive() { // ERREUR : tentative de surcharge d'une méthode finale
super.drive()
print("Driving very quietly")
}
}
Une méthode marquée final
ne peut pas être redéfinie, ce qui entraînera une erreur si vous tentez de le faire.