Leçon 21 : Redéfinition de méthode et le mot-clé super
1. Redéfinition de méthode (Overriding)
La redéfinition de méthode se produit lorsqu'une sous-classe fournit une implémentation spécifique pour une méthode qui est déjà définie dans sa super-classe. La signature de la méthode (nom et paramètres) doit être identique.
C'est un concept fondamental qui permet le Polymorphisme (liaison dynamique).
java public class Car { public void accelerate() { System.out.println("La voiture accélère normalement."); } }
public class SportsCar extends Car { // Redéfinition de méthode : fournir une implémentation spécialisée @Override public void accelerate() { System.out.println("La SportsCar accélère rapidement ! (Vroum !)"); } }
// Utilisation : Car myCar = new Car(); SportsCar fastCar = new SportsCar();
myCar.accelerate(); // Sortie : La voiture accélère normalement. fastCar.accelerate(); // Sortie : La SportsCar accélère rapidement ! (Vroum !)
Annotation @Override : Bien qu'optionnelle, il est préférable d'utiliser l'annotation @Override. Elle indique au compilateur de vérifier si la méthode redéfinit réellement une méthode de la super-classe, ce qui permet de détecter les erreurs rapidement.
2. Le mot-clé super
Le mot-clé super est utilisé pour faire référence à l'objet de la classe parente immédiate.
A. Appel de méthodes de la super-classe
Permet à la sous-classe d'exécuter la version de la parente d'une méthode redéfinie.
java public class SportsCar extends Car { @Override public void accelerate() { super.accelerate(); // Appelle le Car.accelerate() de la parente System.out.println("Puis active le turbo."); } }
B. Appel des constructeurs de la super-classe
Utilisé pour appeler explicitement un constructeur de super-classe à partir du constructeur de la sous-classe. S'il n'est pas utilisé explicitement, Java insère automatiquement super() (appelant le constructeur parent sans argument) comme première ligne.
java // Parent public class Person { public Person(String name) { ... } }
// Enfant public class Employee extends Person { public Employee(String name) { super(name); // Doit être la première instruction } }