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.

  • ๐ŸŽญ Plusieurs formes, un seul nom : Polymorphisme dans Java permet ร  une mรชme mรฉthode de faire appel ร  diffรฉrentes implรฉmentations en fonction du type d'objet rรฉel au moment de l'exรฉcution.
  • ๐Ÿ”€ Deux saveurs : Le polymorphisme ร  la compilation utilise la surcharge de mรฉthodes, tandis que le polymorphisme ร  l'exรฉcution utilise la redรฉfinition de mรฉthodes par le biais de l'hรฉritage et de la JVM.
  • ๐Ÿ‡ง๐Ÿ‡ท Liaison statique vs liaison dynamique : Les appels surchargรฉs sont rรฉsolus lors de la compilation via une liaison statique, tandis que les appels redรฉfinis sont rรฉsolus lors de l'exรฉcution via une liaison dynamique.
  • โœ… Super pouvoir des mots-clรฉs : Le mot-clรฉ super permet ร  une sous-classe d'invoquer l'implรฉmentation parente avant d'y ajouter son propre comportement spรฉcialisรฉ.
  • ๐Ÿงช Portรฉe dans le monde rรฉel : Les comptes bancaires, les hiรฉrarchies du personnel hospitalier et les moteurs de rendu de formes s'appuient tous sur le polymorphisme pour rรฉpondre ร  de nouvelles exigences sans enfreindre le code testรฉ.

Polymorphisme dans Java

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.

Hรฉritage unique en Java

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.

Java Polymorphisme

ร‰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.

Java Polymorphisme

ร‰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.

Java Polymorphisme

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.

Rรจgles de remplacement de mรฉthode dans Java

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.

Surcharge de mรฉthode
Remplacement de mรฉthode
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.

Polymorphisme statique
Polymorphisme dynamique
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.

FAQ

Polymorphisme dans Java La capacitรฉ d'un objet ร  prendre plusieurs formes est appelรฉe ยซ multiple ยป. Une mรชme mรฉthode peut exรฉcuter un code diffรฉrent selon l'objet de la sous-classe rรฉfรฉrencรฉ lors de l'exรฉcution ; c'est le principe fondamental de la programmation orientรฉe objet.

Java Ce systรจme prend en charge le polymorphisme ร  la compilation via la surcharge de mรฉthodes et le polymorphisme ร  l'exรฉcution via la redรฉfinition de mรฉthodes. La surcharge est rรฉsolue ร  la compilation par liaison statique, tandis que la redรฉfinition est rรฉsolue ร  l'exรฉcution par liaison dynamique gรฉrรฉe par la JVM.

La liaison statique associe un appel de mรฉthode ร  sa dรฉfinition lors de la compilation et est utilisรฉe pour la surcharge de mรฉthodes. La liaison dynamique, quant ร  elle, associe l'appel ร  l'exรฉcution en fonction du type d'objet rรฉel et permet la redรฉfinition de mรฉthodes. Java.

Le mot-clรฉ `super` permet ร  une sous-classe d'appeler la mรฉthode redรฉfinie ou d'accรฉder ร  un membre de donnรฉes de sa classe parente. Cela permet ร  la classe enfant de rรฉutiliser la logique de la classe parente et d'y ajouter un comportement spรฉcialisรฉ.

Les tuteurs IA tels que ChatGPT et GitHub Copilot Chat peuvent expliquer le polymorphisme dans Java Avec des analogies personnalisรฉes, gรฉnรฉrez des exercices pratiques, parcourez les arbres d'hรฉritage et interrogez les apprenants sur la liaison statique par rapport ร  la liaison dynamique pour une maรฎtrise plus rapide.

Oui. Les assistants de refactorisation basรฉs sur l'IA, tels que Cursor, Sourcegraph Cody et IntelliJ AI Assistant, peuvent repรฉrer les conditions dupliquรฉes, proposer des hiรฉrarchies de classes et rรฉรฉcrire le code existant. Java code permettant de remplacer les chaรฎnes if-else rรฉpรฉtรฉes par la surcharge de mรฉthodes.

Rรฉsumez cet article avec :