Le polymorphisme en Java est un concept par lequel nous pouvons effectuer une même action de différentes manières. Le polymorphisme est dérivé de 2 mots grecs : poly et morphs. Le mot « poly » signifie beaucoup et « morphs » signifie formes. Donc le polymorphisme signifie de nombreuses formes.
Il existe deux types de polymorphisme en Java : le polymorphisme à la compilation et le polymorphisme à l’exécution. Nous pouvons effectuer le polymorphisme en java par la surcharge de méthode et la surcharge de méthode.
Si vous surchargez une méthode statique en Java, c’est l’exemple du polymorphisme en temps de compilation. Ici, nous nous concentrerons sur le polymorphisme d’exécution en java.
Polymorphisme d’exécution en Java
Le polymorphisme d’exécution ou Dynamic Method Dispatch est un processus dans lequel un appel à une méthode surchargée est résolu à l’exécution plutôt qu’à la compilation.
Dans ce processus, une méthode surchargée est appelée par la variable de référence d’une superclasse. La détermination de la méthode à appeler est basée sur l’objet auquel fait référence la variable de référence.
Comprenons d’abord l’upcasting avant le Runtime Polymorphism.
Upcasting
Si la variable de référence de la classe Parent fait référence à l’objet de la classe Child, on parle d’upcasting. Par exemple:
Pour l’upcasting, nous pouvons utiliser la variable de référence de type classe ou de type interface. Par exemple :
Ici, la relation de la classe B serait :
B IS-A AB IS-A IB IS-A Object
Puisque Object est la classe racine de toutes les classes en Java, nous pouvons donc écrire B IS-A Object.
Exemple de polymorphisme d’exécution Java
Dans cet exemple, nous créons deux classes Bike et Splendor. La classe Splendor étend la classe Bike et surcharge sa méthode run(). Nous appelons la méthode run par la variable de référence de la classe Parent. Puisqu’elle fait référence à l’objet de la sous-classe et que la méthode de la sous-classe surcharge la méthode de la classe Parent, la méthode de la sous-classe est invoquée à l’exécution.
Comme l’invocation de la méthode est déterminée par la JVM et non par le compilateur, on parle de polymorphisme à l’exécution.
Test it Now
Output:
running safely with 60km.
Exemple de polymorphisme à l’exécution de Java : Bank
Envisageons un scénario où Bank est une classe qui fournit une méthode pour obtenir le taux d’intérêt. Cependant, le taux d’intérêt peut différer selon les banques. Par exemple, les banques SBI, ICICI et AXIS fournissent un taux d’intérêt de 8,4 %, 7,3 % et 9,7 %.
Note : Cet exemple est également donné dans la méthode overriding mais il n’y avait pas d’upcasting.
Testez-le maintenant
Sortie:
SBI Rate of Interest: 8.4ICICI Rate of Interest: 7.3AXIS Rate of Interest: 9.7
Exemple de polymorphisme d’exécution Java : Forme
Testez-le maintenant
Sortie:
drawing rectangle...drawing circle...drawing triangle...
Exemple de polymorphisme d’exécution Java : Animal
Test it Now
Output:
eating bread...eating rat...eating meat...
Polymorphisme d’exécution Java avec membre de données
Une méthode est surchargée, pas les membres de données, donc le polymorphisme d’exécution ne peut pas être réalisé par les membres de données.
Dans l’exemple donné ci-dessous, les deux classes ont un membre de données speedlimit. Nous accédons au membre de données par la variable de référence de la classe Parent qui fait référence à l’objet de la sous-classe. Comme nous accédons au membre de données qui n’est pas surchargé, donc il accédera toujours au membre de données de la classe Parent.
Règle : Le polymorphisme à l’exécution ne peut pas être réalisé par les membres de données.
Testez-le maintenant
Sortie: