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.





