Maîtriser la redéfinition de méthode en Java
Maîtriser la redéfinition de méthode en Java
Explorez la redéfinition de méthode en Java avec des exemples pratiques, règles clés, et le puissant mot-clé super.
La semaine dernière, nous avons couvert l'héritage, la fonctionnalité OOP fondamentale qui permet à une sous-classe d'hériter propriétés et comportements d'une superclasse. Maintenant, nous plongerons dans la redéfinition de méthode – quand une sous-classe fournit sa propre implémentation d'une méthode déjà définie dans sa classe parente.
Exemple 1 : Redéfinition de méthode basique
class Animal { public void displayInfo() { System.out.println("I am an animal."); } } class Dog extends Animal { @Override public void displayInfo() { System.out.println("I am a dog."); } } class Main { public static void main(String[] args) { Dog d1 = new Dog(); d1.displayInfo(); } }
Sortie :
I am a dog.
Dans cet extrait, Animal et Dog déclarent tous deux displayInfo(). Quand l'instance Dog l'appelle, l'implémentation de la sous-classe s'exécute, démontrant la redéfinition.
Remarquez l'annotation @Override. Elle indique au compilateur que la méthode doit remplacer la version de la superclasse ; si les signatures ne correspondent pas, le compilateur lance une erreur. Bien que non obligatoire, c'est une bonne pratique qui protège contre les erreurs accidentelles.
Règles de redéfinition en Java
- Les noms de méthode, types de retour et listes de paramètres doivent être identiques dans les deux classes.
- Les méthodes finales ou statiques ne peuvent pas être redéfinies.
- Les méthodes abstraites dans une superclasse doivent être redéfinies par ses sous-classes concrètes.
Utiliser super pour invoquer une méthode de la superclasse
Peut-on encore appeler la méthode parente après redéfinition ? Absolument – utilisez le mot-clé super.
Exemple 2 : Tirer parti de super
class Animal { public void displayInfo() { System.out.println("I am an animal."); } } class Dog extends Animal { public void displayInfo() { super.displayInfo(); System.out.println("I am a dog."); } } class Main { public static void main(String[] args) { Dog d1 = new Dog(); d1.displayInfo(); } }
Sortie :
I am an animal. I am a dog.
Ici, Dog appelle d'abord Animal.displayInfo() via super, puis ajoute son propre message.
Rappelez-vous, les constructeurs ne sont pas hérités, donc il n'y a pas de "redéfinition de constructeur". Cependant, une sous-classe peut invoquer un constructeur de superclasse avec super() – voir le guide mot-clé super Java.
Niveaux d'accès lors de la redéfinition
Les méthodes redéfinies peuvent différer en visibilité, mais seulement de manière à élargir l'accès.
Si une méthode de superclasse est protected, une sous-classe peut la déclarer protected ou public, mais pas private.
Exemple 3 : Changement de visibilité
class Animal { protected void displayInfo() { System.out.println("I am an animal."); } } class Dog extends Animal { public void displayInfo() { System.out.println("I am a dog."); } } class Main { public static void main(String[] args) { Dog d1 = new Dog(); d1.displayInfo(); } }
Sortie :
I am a dog.
Puisque public offre un accès plus large que protected, la redéfinition est valide.
Redéfinition de méthodes abstraites
Les classes abstraites déclarent souvent des méthodes sans corps. Toute sous-classe concrète doit fournir une implémentation ; sinon, le compilateur signale une erreur. Nous explorerons les classes abstraites en profondeur dans un futur tutoriel.
Java
- Maîtriser les opérateurs Java : Types, syntaxe et exemples pratiques
- Maîtriser le try-with-resources Java : gestion automatique des ressources expliquée
- Annotations Java expliquées : types, placement et exemples pratiques
- Types d'annotations Java : guide complet des annotations prédéfinies, personnalisées et méta
- Méthode Java String length() : Comment obtenir la taille d'une chaîne (Exemple)
- Maîtriser Java String.indexOf() : Localiser des sous-chaînes et exemples pratiques
- Comprendre Java String.charAt() : Syntaxe, type de retour, exceptions et exemple pratique
- Maîtriser la méthode Java String compareTo() : Syntaxe, cas d'usage et exemples pratiques
- Méthode Java String.contains() : Comment vérifier la présence de sous-chaînes – Exemples pratiques