4.11. Syntaxe de base Java : polymorphisme
Le polymorphisme est l'un des quatre piliers fondamentaux de la programmation orientée objet (POO), avec l'encapsulation, l'héritage et l'abstraction. En Java, le polymorphisme permet à un objet d'être référencé de plusieurs manières, ce qui est crucial pour la réutilisation du code et la création de systèmes flexibles et extensibles. Dans ce chapitre, nous explorerons le concept de polymorphisme, comment il se manifeste en Java et comment vous pouvez l'utiliser pour améliorer vos programmes.
Qu'est-ce que le polymorphisme ?
Le polymorphisme, du grec « polys » (plusieurs) et « morphē » (forme), fait référence à la capacité d'une méthode, d'un objet ou d'une variable à être représenté de plusieurs manières. Dans le contexte de Java, cela signifie généralement qu'une référence d'une classe parent peut pointer vers un objet d'une classe enfant, permettant ainsi d'invoquer des méthodes de telle manière que l'implémentation spécifique de la méthode soit déterminée au moment de l'exécution (polymorphisme d'exécution ).
Types de polymorphisme en Java
Il existe deux principaux types de polymorphisme en Java :
- Polymorphisme de compilation (ou statique) : également connu sous le nom de surcharge de méthodes, il se produit lorsque deux ou plusieurs méthodes de la même classe ont le même nom, mais des paramètres différents. La décision quant à la méthode qui sera appelée est prise au moment de la compilation.
- Polymorphisme d'exécution (ou dynamique) : également appelé remplacement de méthode, il se produit lorsqu'une classe enfant fournit une implémentation spécifique d'une méthode déjà fournie par sa classe parent ou son interface. La décision concernant l'implémentation de la méthode à exécuter est prise au moment de l'exécution.
Polymorphisme d'exécution
Pour mieux comprendre le polymorphisme d'exécution, considérons l'exemple suivant :
classe Animal {
parler nul() {
System.out.println("L'animal fait un bruit");
}
}
la classe Chien étend Animal {
parler nul() {
System.out.println("Le chien aboie : Woof !");
}
}
la classe Chat étend Animal {
parler nul() {
System.out.println("Le chat miaule : Miaou !");
}
}
classe publique TestPolymorphisme {
public static void main (String[] arguments) {
Animal monAnimal = new Animal();
Animal monDog = new Dog();
Animal monChat = nouveau Chat();
monAnimal.talk();
monDog.talk();
monChat.talk();
}
}
Dans cet exemple, la classe Animal
a une méthode talk()
, qui est remplacée par les classes Dog
et Cat
code>. Dans la méthode main
, nous créons trois références de type Animal
, mais deux d'entre elles pointent vers des objets de sous-classes spécifiques. Lorsque la méthode talk()
est invoquée sur les références meuCachorro
et meuCat
, les implémentations spécifiques de Dog
et < code >Cat sont appelés respectivement. Cela démontre le polymorphisme d'exécution.
Avantages du polymorphisme
Le polymorphisme offre plusieurs avantages, notamment :
- Flexibilité : permet aux programmes d'appeler des méthodes dont ils ne savent pas nécessairement comment elles sont implémentées au moment de la compilation.
- Réutilisation du code : Avec le polymorphisme, il est possible d'écrire du code qui fonctionne avec des classes qui n'ont pas encore été créées.
- Maintenabilité : le polymorphisme vous aide à créer un code plus facile à comprendre et à maintenir.
Interfaces et polymorphisme
Les interfaces en Java sont un autre mécanisme qui favorise le polymorphisme. Une interface est un contrat qui spécifie quelles méthodes une classe doit implémenter, sans fournir l'implémentation elle-même. Lorsqu'une classe implémente une interface, toute référence de type de cette interface peut pointer vers un objet de cette classe.
Interface animale {
conversation nulle ();
}
la classe Chien implémente Animal {
public void parler() {
System.out.println("Le chien aboie : Woof !");
}
}
la classe Cat implémente Animal {
public void parler() {
System.out.println("Le chat miaule : Miaou !");
}
}
classe publique TestInterfacePolymorphism {
public static void main (String[] arguments) {
Animal monDog = new Dog();
Animal monChat = nouveau Chat();
monDog.talk();
monChat.talk();
}
}
Dans cet exemple, l'interface Animal
définit une méthode talk()
qui doit être implémentée par toute classe qui l'implémente. Les classes Dog
et Cat
fournissent leurs propres implémentations de la méthode talk()
. Dans la méthode main
, les références de type Animal
sont utilisées pour invoquer le mMéthode talk()
sur les objets Dog
et Cat
, démontrant le polymorphisme.
Considérations finales
Le polymorphisme est un outil puissant de programmation Java, vous permettant d'écrire du code à la fois général et spécifique. Il est essentiel pour créer des applications robustes et flexibles. En comprenant et en appliquant correctement le polymorphisme, vous pouvez tirer le meilleur parti du paradigme orienté objet, en créant des systèmes faciles à étendre et à maintenir au fil du temps.