Le
Le remplacement de méthode est l'un des concepts fondamentaux du polymorphisme en Java, permettant à une sous-classe de fournir une implémentation spécifique d'une méthode déjà définie dans sa superclasse. Cette fonctionnalité puissante permet d'obtenir un polymorphisme d'exécution et permet une distribution dynamique de méthodes. Dans cet article, nous aborderons les concepts essentiels, les règles et les exemples concrets pour bien comprendre le remplacement de méthode .
Le remplacement de méthode se produit lorsqu'une sous-classe redéfinit une méthode de sa superclasse avec la même signature de méthode (mêmes nom, paramètres et type de retour ou type de retour covariant). Contrairement à la surcharge de méthode, qui est résolue au moment de la compilation, la substitution de méthode atteint un polymorphisme d'exécution, où la méthode réelle appelée dépend du type d'exécution de l'objet.
1. Cohérence des signatures de méthode :
2. Type de retour et types de retour covariants :
3. Modificateurs d'accès :
Public > Protégé > Par défaut (Package-Privé) > Privé
4. Visibilité de la méthode :
package oops.polymorphism; // Base class public class MethodOverridingParent { // Private Methods CANNOT be overridden private String getName() { return "Hello"; } // Display method to be overridden (Access Modifier: default) void display() { System.out.println("Parent Method Called"); } // Return type is Number (parent class of Integer, Double, etc.) public Number getCount() { return 20; } }
Dans MethodOverridingParent, seuls display() et getCount() peuvent être remplacés par des sous-classes, car elles sont accessibles au-delà de la classe parent. Cependant, getName() est privé, il ne peut donc pas être remplacé car il n'est pas hérité par les sous-classes.
package oops.polymorphism; public class MethodOverridingChild extends MethodOverridingParent { // Access Level Increased; Default -> Protected @Override protected void display() { System.out.println("Child Method Called"); } public static void main(String[] args) { // Calling Parent Class Method MethodOverridingParent parent = new MethodOverridingParent(); parent.display(); // Output: Parent Method Called // Calling Child Class Overridden Method - Runtime Polymorphism MethodOverridingParent child = new MethodOverridingChild(); child.display(); // Output: Child Method Called } }
Explication : Puisque display() est remplacé dans la sous-classe MethodOverridingChild, l'invocation de display() sur une instance MethodOverridingChild appelle la version de l'enfant. C'est le polymorphisme d'exécution en action.
La prise en charge par Java des types de retour covariants permet à la sous-classe de renvoyer un type plus spécifique que le type de retour de la superclasse. Cette approche suit le Principe de substitution de Liskov dans les principes SOLID, améliorant la flexibilité du code.
package oops.polymorphism; // Base class public class MethodOverridingParent { // Private Methods CANNOT be overridden private String getName() { return "Hello"; } // Display method to be overridden (Access Modifier: default) void display() { System.out.println("Parent Method Called"); } // Return type is Number (parent class of Integer, Double, etc.) public Number getCount() { return 20; } }
Explication : Dans CovariantReturnType, getCount() remplace la méthode parent en renvoyant un Integer, un sous-type de Number, démontrant les types de retour covariants. La méthode reste publique car Java exige que le niveau d'accès d'une méthode remplacée ne puisse pas être réduit.
En comprenant et en appliquant la substitution de méthode, nous pouvons créer des applications Java plus flexibles, réutilisables et polymorphes qui adhèrent aux principes de la programmation orientée objet.
Principes fondamentaux de Java
Les essentiels de l'entretien avec Array
L'essentiel de la mémoire Java
L'essentiel des mots-clés Java
L'essentiel du cadre de collections
Bon codage !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!