Retour au cours

Redéfinition de méthode (Overriding) et le mot-clé super

Maîtrise de Java : De Zéro à Développeur Professionnel (Un parcours en 50 leçons)

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 } }