Polymorphisme dans Java (Statique et dynamique)

Qu'est-ce que le polymorphisme dans Java?

Polymorphisme in Java se produit lorsqu'il existe une ou plusieurs classes ou objets liés les uns aux autres par héritage. C'est 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 effectuer différentes tâches. Le but est donc la communication, mais l’approche est différente.

Par exemple, vous disposez d’un smartphone pour communiquer. Le mode de communication que vous choisissez peut être n’importe quoi. Il peut s'agir d'un appel, d'un message texte, d'un message photo, d'un courrier, etc. Ainsi, l'objectif commun est la communication, mais leur approche est différente. C'est appelé Polymorphisme. Maintenant, nous allons apprendre le polymorphisme dans Java avec exemple.

Cliquez ici si la vidéo n'est pas accessible

Java Polymorphisme dans les POO avec exemple

Nous avons une classe parent, « Compte », avec une fonction de dépôt et de retrait. Compte a 2 classes enfants. L'opération de dépôt et de retrait est la même pour les comptes d'épargne et de chèques. Les méthodes héritées de la classe Compte fonctionneront donc.

Héritage unique en Java
Java Exemple de polymorphisme

Modification des exigences logicielles

Il y a un changement dans la spécification des exigences, quelque chose qui est si courant dans l'industrie du logiciel. Vous êtes censé ajouter la fonctionnalité Compte bancaire privilégié avec facilité de découvert. Pour rappel, le découvert est une facilité qui vous permet de retirer un montant supérieur au solde disponible de votre compte. Ainsi, la méthode de retrait pour les besoins privilégiés doit être implémentée à nouveau. Mais vous ne modifiez pas le morceau de code testé dans le compte d'épargne et le compte courant. C'est l'avantage de OOPS

Java Polymorphisme

Étape 1) De telle sorte que lorsque la méthode « retirée » pour le compte d'épargne est appelée, une méthode de la classe de compte parent est exécutée

Java Polymorphisme

Étape 2) Mais lorsque la méthode « Retrait » pour le compte privilégié (facilité de découvert) est appelée, la méthode de retrait définie dans la classe privilégiée est exécutée. C'est Polymorphisme dans les POO.

Java Polymorphisme

Remplacement de méthode dans Java

Le remplacement de méthode consiste à redéfinir une méthode de super classe dans une sous-classe.

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, doivent correspondre exactement.
  • La méthode surchargée peut élargir l'accessibilité mais pas la restreindre, c'est-à-dire que si elle est privée dans la classe de base, la classe enfant peut la rendre publique mais pas l'inverse.

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 surcharge et remplacement

Surcharge de méthode
Remplacement de méthode
La surcharge de méthodes se situe dans la même classe, où plusieurs méthodes ont le même nom mais des signatures différentes. Le remplacement de méthode se produit lorsqu'une des méthodes de la super classe est redéfinie dans la sous-classe. Dans ce cas, la signature de la méthode reste la même.
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 dans les POO est le mécanisme par lequel plusieurs méthodes peuvent être définies avec le même nom et la même signature dans la superclasse et la sous-classe. Les appels à une méthode remplacée sont résolus au moment de l'exécution.

Exemple de polymorphisme dynamique :

Une variable de référence de la super classe peut faire référence à un objet de sous-classe

 Doctor obj = new Surgeon();

Considérez la déclaration

obj.treatPatient();

Ici, la variable de référence « obj » appartient à la classe parent, mais l'objet vers lequel elle pointe appartient à la classe enfant (comme le montre l'exemple de diagramme ci-dessous de polymorphisme).

obj.treatPatient() exécutera la méthode TreatPatient() de la sous-classe – Chirurgien

Si une référence de classe de base est utilisée pour appeler une méthode, la méthode à appeler est décidée par la JVM, en fonction de l'objet vers lequel pointe la référence.

Par exemple, même si obj est une référence à Doctor, il appelle la méthode Surgeon, car elle pointe vers un objet Surgeon.

Ceci est décidé pendant l'exécution et est donc appelé Dynamic or polymorphisme à l'exécution

Différence entre le polymorphisme statique et dynamique

Polymorphisme statique dans Java est un type de polymorphisme qui collecte les informations permettant d'appeler une méthode au moment de la compilation, tandis que le polymorphisme dynamique est un type de polymorphisme qui collecte les informations permettant d'appeler une méthode au moment de l'exécution.

Polymorphisme statique
Polymorphisme dynamique
Cela concerne la surcharge de méthode. Cela concerne le remplacement de méthode.
Les erreurs, le cas échéant, sont résolues au moment de la compilation. Puisque le code n'est pas exécuté lors de la compilation, d'où le nom static.

Ex:

void sum (int a , int b);
void sum (float a, double b);
int sum (int a, int b); //compiler gives error.

Dans le cas où une variable de référence appelle une méthode remplacée, la méthode à appeler est déterminée par l'objet vers lequel pointe votre variable de référence. Cela ne peut être déterminé qu'au moment de l'exécution, lorsque le code est en cours d'exécution, d'où le nom dynamique.

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 et ensuite exécuter sa propre fonctionnalité spécifique ? Dans ce cas, le mot-clé superpeut ê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 peut être utilisé pour accéder à n’importe quelle donnée membre ou méthode de la super classe dans la sous-classe.

Ensuite, nous découvrirons le super mot-clé, Droit des successions et le polymorphisme dans Java avec des exemples de programmes.

Exemple : -Pour apprendre l'héritage, le polymorphisme et le super mot-clé

É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(){
            // overriden 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 la sortie.

Étape 3) Décommentez les lignes n°6 à 9. Enregistrez, compilez et exécutez le code. Observez la sortie.

Étape 4) Décommentez la ligne n°10. Enregistrez et compilez le code.

Étape 5) Erreur = ? En effet, la sous-classe ne peut pas accéder aux membres privés de la super classe.

Résumé

  • Le polymorphisme dans la programmation orientée objet se produit lorsqu'il existe une ou plusieurs classes ou objets liés les uns aux autres par héritage. C'est la capacité d'un objet à prendre plusieurs formes.
  • Le remplacement de méthode consiste à redéfinir une méthode de super classe dans une sous-classe.
  • Polymorphisme dynamique dans Java est le mécanisme par lequel plusieurs méthodes peuvent être définies avec le même nom et la même signature dans la superclasse et la sous-classe.
  • Polymorphisme statique dans Java est un type de polymorphisme qui collecte les informations permettant d'appeler une méthode au moment de la compilation, tandis que le polymorphisme dynamique est un type de polymorphisme qui collecte les informations permettant d'appeler une méthode au moment de l'exécution.
  • Le mot-clé super peut être utilisé pour accéder aux méthodes de la classe parent à partir de la classe enfant.