La surcharge de méthodes (overriding) est un mécanisme de la POO où une sous-classe fournit sa propre implémentation d'une méthode déjà définie dans sa superclasse. La méthode dans la sous-classe doit avoir le même nom, les mêmes paramètres et le même type de retour (ou être son sous-type).
Règles clés :
@Override aide à détecter les erreurs au moment de la compilation.Exemple :
class Animal { public void sound() { System.out.println("Some sound"); } } class Dog extends Animal { @Override public void sound() { System.out.println("Woof"); } }
Question : "Peut-on surcharger une méthode statique en Java ?"
Réponse : Non, les méthodes statiques ne peuvent pas être surchargées. Elles sont cachées (method hiding). Si vous déclarez une méthode statique avec la même signature dans une sous-classe, il s'agira d'une cachette, et non d'une surcharge.
Exemple :
class A { static void print() { System.out.println("A"); } } class B extends A { static void print() { System.out.println("B"); } } A obj = new B(); obj.print(); // affichera "A"
Histoire
Dans un projet, l'un des développeurs a essayé de "surcharger" une méthode static dans la classe héritée, s'attendant à ce que la version de la sous-classe soit appelée par référence de la superclasse. Cela a conduit à des résultats inattendus : la méthode de la superclasse était appelée, ce qui a rendu le programme incorrect.
Histoire
Il est important d'utiliser l'annotation
@Override. Dans un projet, un développeur a fait une erreur dans le nom de la méthode lors de la surcharge, et sans l'annotation, le compilateur n'a pas signalé d'erreur. En conséquence, la méthode de la classe de base a été appelée (par défaut) sur la hiérarchie d'héritage, ce qui a entraîné une logique incorrecte dans les processus métier.
Histoire
Masquage des exceptions vérifiées : un développeur a ajouté au modèle de méthode surchargé le lancement d'une nouvelle exception vérifiée, qui n'était pas spécifiée dans la signature d'origine. Le code a été compilé avec une erreur et il a fallu changer l'architecture car cela enfreint la règle de surcharge des exceptions.