Polymorphisme dans Java (Statique et dynamique)
⚡ Résumé intelligent
Polymorphisme dans Java Permet à une seule interface de représenter plusieurs formulaires ; ainsi, une même méthode peut avoir un comportement différent selon les classes apparentées. C’est un pilier de la conception orientée objet qui favorise la flexibilité, la réutilisation du code et l’extension aisée des systèmes bancaires, médicaux et d’entreprise existants.

Qu'est-ce que le polymorphisme dans Java?
Polymorphisme dans Java Le polymorphisme se produit lorsqu'une ou plusieurs classes ou objets sont liés par héritage. Il s'agit de la capacité d'un objet à prendre plusieurs formes. L'héritage permet aux utilisateurs d'hériter d'attributs et de méthodes, et le polymorphisme utilise ces méthodes pour réaliser différentes tâches. L'objectif est la communication, même si l'approche peut varier.
Par exemple, un smartphone est utilisé pour communiquer. Le mode de communication peut être un appel, un SMS, un MMS ou un courriel. L'objectif est le même, à savoir communiquer, mais l'approche diffère. Ce comportement constitue l'essence même de… PolymorphismeNous allons maintenant étudier le polymorphisme. Java avec des exemples de code, des diagrammes et des explications étape par étape.
Cliquez à nouveau ici si la vidéo n'est pas accessible
Pourquoi utiliser le polymorphisme dans Java?
Polymorphisme dans Java Ce modèle est utilisé car il rend le code flexible, réutilisable et plus facile à maintenir. Une seule variable de référence d'un type parent peut pointer vers plusieurs objets enfants ; ainsi, un même appel s'adapte à la sous-classe fournie. Ce modèle préserve l'intégrité du code testé tandis que de nouveaux comportements sont ajoutés via des sous-classes spécialisées, ce qui explique précisément pourquoi des frameworks tels que Spring et Jakarta EE s'appuient sur lui.
Java Polymorphisme dans les POO avec exemple
Considérons une classe parente nommée Compte Cette classe comporte des fonctions de dépôt et de retrait. Elle possède deux classes enfants. Le fonctionnement des dépôts et des retraits étant identique pour les comptes d'épargne et les comptes courants, les méthodes héritées de la classe Account sont applicables.
Java Exemple de polymorphisme
Modification des exigences logicielles
Une modification des spécifications fonctionnelles est intervenue, une situation courante dans le secteur du logiciel. La fonctionnalité de compte bancaire privilégié avec autorisation de découvert doit être ajoutée. L'autorisation de découvert permet à un client de retirer un montant supérieur au solde disponible sur son compte. La méthode de retrait pour ce compte privilégié nécessite une nouvelle implémentation, tandis que le code testé pour les comptes d'épargne et les comptes courants reste inchangé. Cette isolation constitue l'avantage de… OOPS.
Étape 1) Lorsque la méthode de retrait du compte d'épargne est appelée, la méthode définie dans la classe parente Account est exécutée.
Étape 2) Lorsque la méthode de retrait du compte privilégié (autorisation de découvert) est appelée, la méthode de retrait définie dans la classe privilégiée est exécutée. Cette instruction est Polymorphisme en POO.
Remplacement de méthode dans Java
La redéfinition de méthode est le processus qui consiste à redéfinir une méthode de la superclasse au sein d'une sous-classe. La sous-classe conserve les mêmes propriétés.tract, mais fournit une nouvelle implémentation qui est sélectionnée lors de l'exécution du programme.
Règles de remplacement de méthode
- La signature de la méthode, c'est-à-dire le nom de la méthode, la liste des paramètres et le type de retour, doit correspondre exactement.
- La redéfinition d'une méthode peut étendre son accessibilité, mais ne peut la restreindre. Si la méthode est privée dans la classe de base, la classe enfant peut la rendre publique, mais l'inverse n'est pas possible.
Exemple
class Doctor{ public void treatPatient(){ // treatPatient method } class Surgeon extends Doctor{ public void treatPatient(){ // treatPatient method } } class Run{ public static void main (String args[]){ Doctor doctorObj = new Doctor(); // treatPatient method in class Doctor will be executed doctorObj.treatPatient(); Surgeon surgeonObj = new Surgeon(); // treatPatient method in class Surgeon will be executed surgeonObj.treatPatient(); } }
Différence entre la surcharge de méthodes et la redéfinition de méthodes
La surcharge de méthodes se produit au sein d'une même classe, avec des méthodes portant le même nom mais ayant des signatures différentes. La redéfinition de méthodes s'effectue entre classes parentes et enfants, la sous-classe redéfinissant une méthode déclarée dans la super-classe.
| La surcharge de méthodes se produit au sein d'une même classe, lorsqu'une ou plusieurs méthodes portent le même nom mais ont des signatures différentes. | La redéfinition de méthode consiste à redéfinir une méthode de la superclasse dans la sous-classe. Dans ce cas, la signature de la méthode reste inchangée. |
Ex:
void sum (int a , int b); void sum (int a , int b, int c); void sum (float a, double b); |
Ex:
class X{ public int sum(){ // some code } } class Y extends X{ public int sum(){ //overridden method //signature is same } } |
Qu’est-ce que le polymorphisme dynamique ?
Le polymorphisme dynamique en programmation orientée objet est le mécanisme qui permet de définir plusieurs méthodes portant le même nom et la même signature dans la superclasse et la sous-classe. L'appel à une méthode redéfinie est résolu à l'exécution grâce à la liaison dynamique au sein de la JVM.
Exemple de polymorphisme dynamique
Une variable de référence de la superclasse peut faire référence à un objet de la sous-classe :
Doctor obj = new Surgeon();
Considérez l'affirmation suivante :
obj.treatPatient();
Ici, la variable de référence obj L'objet appartient à la classe parente, mais l'objet qu'il pointe appartient à la classe enfant, comme le montre le diagramme de polymorphisme.
L'appel obj.traiterPatient() exécutera la méthode treatPatient() de la sous-classe Surgeon. Lorsqu'une référence à une classe de base est utilisée pour appeler une méthode, la méthode invoquée est déterminée par la JVM en fonction de l'objet réel pointé par la référence. Même si obj est une référence à Doctor, elle appelle la méthode de Surgeon, car elle pointe vers un objet Surgeon. La décision est prise lors de l'exécution, c'est pourquoi on l'appelle Polymorphisme dynamique ou polymorphisme d'exécution.
Différence entre polymorphisme statique et dynamique
Polymorphisme statique dans Java Le polymorphisme statique est un type de polymorphisme qui collecte les informations nécessaires à l'appel d'une méthode au moment de la compilation, tandis que le polymorphisme dynamique est un type de polymorphisme qui collecte les informations nécessaires à l'appel d'une méthode au moment de l'exécution.
| Cela concerne la surcharge de méthodes. | Cela concerne la surcharge de méthodes. |
| Les erreurs éventuelles sont résolues à la compilation. Le nom du fichier étant statique, il n'est pas exécuté lors de la compilation.
Ex: void sum (int a , int b); void sum (float a, double b); int sum (int a, int b); //compiler gives error. |
Lorsqu'une variable de référence appelle une méthode redéfinie, la méthode à invoquer dépend de l'objet pointé par la variable de référence. Cette information ne peut être déterminée qu'à l'exécution du code, d'où le caractère dynamique du nom de la méthode.
Ex: //reference of parent pointing to child object Doctor obj = new Surgeon(); // method of child called obj.treatPatient(); |
Super mot-clé dans Java
Que se passe-t-il si la méthode treatPatient de la classe Surgeon souhaite exécuter la fonctionnalité définie dans la classe Doctor, puis effectuer son propre comportement spécifique ? Dans ce cas, le mot-clé super peut être utilisée pour accéder aux méthodes de la classe parent depuis la classe enfant. La méthode treatPatient de la classe Surgeon pourrait être écrite comme suit :
treatPatient(){
super.treatPatient();
//add code specific to Surgeon
}
Le mot-clé `super` permet d'accéder à n'importe quel membre de données ou méthode de la superclasse depuis la sous-classe. Nous allons maintenant étudier le mot-clé `super`. Droit des successions, et le polymorphisme dans Java avec des exemples de programmes.
Exemple : Apprendre l’héritage, le polymorphisme et le mot-clé super
Étape 1) Copiez le code suivant dans un éditeur.
public class Test{ public static void main(String args[]){ X x= new X(); Y y = new Y(); y.m2(); //x.m1(); //y.m1(); //x = y;// parent pointing to object of child //x.m1() ; //y.a=10; } } class X{ private int a; int b; public void m1(){ System.out.println("This is method m1 of class X"); } } class Y extends X{ int c; // new instance variable of class Y public void m1(){ // overridden method System.out.println("This is method m1 of class Y"); } public void m2(){ super.m1(); System.out.println("This is method m2 of class Y"); } }
Étape 2) Enregistrez, compilez et exécutez le code. Observez le résultat.
Étape 3) Décommentez les lignes 6 à 9. Enregistrez, compilez et exécutez le code. Observez le résultat.
Étape 4) Décommentez la ligne 10. Enregistrez et compilez le code.
Étape 5) Erreur = ? Cela est dû au fait que la sous-classe ne peut pas accéder aux membres privés de la superclasse.





