Polymorphisme Java (avec exemples)

Dans ce tutoriel, nous allons découvrir le polymorphisme Java et son implémentation à l'aide d'exemples.

Le polymorphisme est un concept important de la programmation orientée objet. Cela signifie simplement plus d'un formulaire.

Autrement dit, la même entité (méthode ou opérateur ou objet) peut effectuer différentes opérations dans différents scénarios.

Exemple: polymorphisme Java

 class Polygon ( // method to render a shape public void render() ( System.out.println("Rendering Polygon… "); ) ) class Square extends Polygon ( // renders Square public void render() ( System.out.println("Rendering Square… "); ) ) class Circle extends Polygon ( // renders circle public void render() ( System.out.println("Rendering Circle… "); ) ) class Main ( public static void main(String() args) ( // create an object of Square Square s1 = new Square(); s1.render(); // create an object of Circle Circle c1 = new Circle(); c1.render(); ) )

Production

 Rendu du carré… Rendu du cercle… 

Dans l'exemple ci-dessus, nous avons créé une superclasse: Polygon et deux sous-classes: Square et Circle. Notez l'utilisation de la render()méthode.

Le but principal de la render()méthode est de rendre la forme. Cependant, le processus de rendu d'un carré est différent du processus de rendu d'un cercle.

Par conséquent, la render()méthode se comporte différemment dans différentes classes. Ou, nous pouvons dire render()est polymorphe.

Pourquoi le polymorphisme?

Le polymorphisme nous permet de créer un code cohérent. Dans l'exemple précédent, nous pouvons également créer différentes méthodes: renderSquare()et renderCircle()pour rendre respectivement Square et Circle.

Cela fonctionnera parfaitement. Cependant, pour chaque forme, nous devons créer différentes méthodes. Cela rendra notre code incohérent.

Pour résoudre ce problème, le polymorphisme en Java nous permet de créer une méthode unique render()qui se comportera différemment pour différentes formes.

Remarque : la print()méthode est également un exemple de polymorphisme. Il est utilisé pour imprimer des valeurs de différents types comme char, int, string, etc.

Nous pouvons réaliser le polymorphisme en Java en utilisant les méthodes suivantes:

  1. Remplacement de méthode
  2. Surcharge de méthode
  3. Surcharge de l'opérateur

Remplacement de méthode Java

Pendant l'héritage en Java, si la même méthode est présente à la fois dans la superclasse et la sous-classe. Ensuite, la méthode de la sous-classe remplace la même méthode de la superclasse. C'est ce qu'on appelle le remplacement de méthode.

Dans ce cas, la même méthode effectuera une opération dans la superclasse et une autre opération dans la sous-classe. Par exemple,

Exemple 1: Polymorphisme utilisant la substitution de méthode

 class Language ( public void displayInfo() ( System.out.println("Common English Language"); ) ) class Java extends Language ( @Override public void displayInfo() ( System.out.println("Java Programming Language"); ) ) class Main ( public static void main(String() args) ( // create an object of Java class Java j1 = new Java(); j1.displayInfo(); // create an object of Language class Language l1 = new Language(); l1.displayInfo(); ) )

Sortie :

 Langage de programmation Java Langue anglaise commune

Dans l'exemple ci-dessus, nous avons créé une superclasse nommée Language et une sous-classe nommée Java. Ici, la méthode displayInfo()est présente à la fois en langage et en Java.

L'utilisation de displayInfo()est d'imprimer les informations. Cependant, il imprime des informations différentes en langage et en Java.

En fonction de l'objet utilisé pour appeler la méthode, les informations correspondantes sont imprimées.

Fonctionnement du polymorphisme Java

Remarque : La méthode appelée est déterminée lors de l'exécution du programme. Par conséquent, le remplacement de méthode est un polymorphisme d'exécution .

2. Surcharge de méthode Java

Dans une classe Java, nous pouvons créer des méthodes avec le même nom si elles diffèrent dans les paramètres. Par exemple,

 void func() (… ) void func(int a) (… ) float func(double a) (… ) float func(int a, float b) (… )

C'est ce qu'on appelle la surcharge de méthode en Java. Ici, la même méthode effectuera différentes opérations en fonction du paramètre.

Exemple 3: Polymorphisme utilisant la surcharge de méthode

 class Pattern ( // method without parameter public void display() ( for (int i = 0; i < 10; i++) ( System.out.print("*"); ) ) // method with single parameter public void display(char symbol) ( for (int i = 0; i < 10; i++) ( System.out.print(symbol); ) ) ) class Main ( public static void main(String() args) ( Pattern d1 = new Pattern(); // call method without any argument d1.display(); System.out.println(""); // call method with a single argument d1.display('#'); ) )

Sortie :

 ********** ##########

Dans l'exemple ci-dessus, nous avons créé une classe nommée Pattern. La classe contient une méthode nommée display()qui est surchargée.

 // method with no arguments display() (… ) // method with a single char type argument display(char symbol) (… )

Ici, la fonction principale de display()est d'imprimer le motif. Cependant, en fonction des arguments passés, la méthode effectue différentes opérations:

  • imprime un modèle de *, si aucun argument n'est passé ou
  • imprime le modèle du paramètre, si un seul charargument de type est passé.

Remarque : la méthode appelée est déterminée par le compilateur. Par conséquent, il est également connu sous le nom de polymorphisme à la compilation.

3. Surcharge des opérateurs Java

Certains opérateurs en Java se comportent différemment avec des opérandes différents. Par exemple,

  • + operator is overloaded to perform numeric addition as well as string concatenation, and
  • operators like &, |, and ! are overloaded for logical and bitwise operations.

Let's see how we can achieve polymorphism using operator overloading.

The + operator is used to add two entities. However, in Java, the + operator performs two operations.

1. When + is used with numbers (integers and floating-point numbers), it performs mathematical addition. For example,

 int a = 5; int b = 6; // + with numbers int sum = a + b; // Output = 11

2. When we use the + operator with strings, it will perform string concatenation (join two strings). For example,

 String first = "Java "; String second = "Programming"; // + with strings name = first + second; // Output = Java Programming

Here, we can see that the + operator is overloaded in Java to perform two operations: addition and concatenation.

Note: In languages like C++, we can define operators to work differently for different operands. However, Java doesn't support user-defined operator overloading.

Polymorphic Variables

A variable is called polymorphic if it refers to different values under different conditions.

Object variables (instance variables) represent the behavior of polymorphic variables in Java. It is because object variables of a class can refer to objects of its class as well as objects of its subclasses.

Example: Polymorphic Variables

 class ProgrammingLanguage ( public void display() ( System.out.println("I am Programming Language."); ) ) class Java extends ProgrammingLanguage ( @Override public void display() ( System.out.println("I am Object-Oriented Programming Language."); ) ) class Main ( public static void main(String() args) ( // declare an object variable ProgrammingLanguage pl; // create object of ProgrammingLanguage pl = new ProgrammingLanguage(); pl.display(); // create object of Java class pl = new Java(); pl.display(); ) )

Output:

 I am Programming Language. I am Object-Oriented Programming Language.

Dans l'exemple ci-dessus, nous avons créé une variable objet pl de la classe ProgrammingLanguage. Ici, pl est une variable polymorphe. Ceci est dû au fait,

  • Dans l'instruction pl = new ProgrammingLanguage(), veuillez faire référence à l'objet de la classe ProgrammingLanguage.
  • Et, dans l'instruction pl = new Java(), pl référez-vous à l'objet de la classe Java.

Voici un exemple d'upcasting en Java.

Articles intéressants...