13.5 Héritage et polymorphisme en Java : hiérarchie des classes
La programmation orientée objet (POO) est un paradigme de développement logiciel basé sur le concept d'« objets », qui peuvent contenir des données sous forme de champs, souvent appelés attributs, et du code, sous forme de procédures. souvent appelés méthodes. Deux des piliers fondamentaux de la POO sont l'héritage et le polymorphisme, qui permettent la création d'un code plus réutilisable et plus flexible.
Héritage en Java
L'héritage est un mécanisme qui permet de créer une nouvelle classe basée sur une classe existante. La nouvelle classe, appelée sous-classe ou classe dérivée, hérite des champs et des méthodes de la classe existante, appelée superclasse ou classe de base. L'héritage est un moyen de réutiliser du code et d'établir une relation de type entre les classes, créant ainsi une hiérarchie.
En Java, l'héritage s'effectue avec le mot-clé extends
. Par exemple :
classe Animal {
vide manger() {
System.out.println("Cet animal mange");
}
}
la classe Chien étend Animal {
écorce vide() {
System.out.println("Le chien aboie");
}
}
Ici, la classe Dog
étend la classe Animal
, ce qui signifie que Dog
hérite de eat()
method.code> à partir de Animal
. Cela signifie qu'un objet Dog
peut appeler la méthode eat()
, même si elle n'a pas été explicitement définie dans la classe Dog
. p >
Java ne prend en charge que l'héritage simple, ce qui signifie qu'une classe ne peut étendre qu'une seule classe. Cependant, une classe peut implémenter plusieurs interfaces, ce qui est un sujet différent et aussi un moyen de réaliser la polymorphie.
Polymorphisme en Java
Le polymorphisme est la capacité d'une méthode à avoir plusieurs formes. En Java, cela se fait principalement de deux manières : en surchargeant le polymorphisme et en remplaçant.
Le polymorphisme de surcharge se produit lorsque deux méthodes ou plus de la même classe ont le même nom mais des paramètres différents. Par exemple :
exemple de classe {
annuler la démo (int a) {
System.out.println("a: " + a);
}
void démo (int a, int b) {
System.out.println("a et b: " + a + "," + b);
}
double démo (double a) {
System.out.println("double a: " + a);
renvoyer a*a ;
}
}
Le polymorphisme en exposant, en revanche, se produit lorsqu'une sous-classe possède une méthode avec la même signature (nom et paramètres) qu'une méthode de la superclasse. Lors de la substitution d'une méthode, la sous-classe fournit sa propre implémentation. Un exemple de ceci serait :
classe Animal {
son vide() {
System.out.println("L'animal fait un bruit");
}
}
la classe Chien étend Animal {
@Passer outre
son vide() {
System.out.println("Le chien aboie");
}
}
Avec le polymorphisme prioritaire, lorsqu'une méthode est invoquée, la méthode de la sous-classe est appelée, pas celle de la superclasse. L'utilisation de l'annotation @Override
est facultative, mais il s'agit d'une bonne pratique de programmation, car elle permet d'éviter les erreurs et rend le code plus lisible.
Hiérarchie des classes
La hiérarchie des classes est l'organisation des classes dans une structure arborescente où la classe de base est le nœud racine et les sous-classes sont les nœuds enfants. Cette structure permet la réutilisation du code et la gestion de la complexité dans les grands systèmes. Dans une hiérarchie de classes, une sous-classe hérite de l'état et du comportement de la superclasse, pouvant ajouter de nouveaux champs et méthodes ou remplacer ceux existants.
Un exemple classique de hiérarchie de classes est la classification biologique. Par exemple, la classe Mammal
peut étendre la classe Animal
, et la classe Dog
peut étendre la classe Mammal
. Chaque niveau de la hiérarchie ajoute des caractéristiques spécifiques héritées des niveaux inférieurs.
Considérations finales
L'héritage et le polymorphisme sont des concepts essentiels dans le développement orienté objet. Ils vous permettent de créer une structure de code à la fois flexible et facile à maintenir. L'héritage permet d'établir une relation « est-un » entre les classes, tandis que le polymorphisme permet de traiter de manière uniforme des objets de différentes classes. Ensemble, ils fournissent des outils puissants pour développer des logiciels en Java et de nombreux autres langages de programmation orientés objet.
Comprendre et appliquer correctement l'héritage et le polymorphisme peut s'avérer difficile pour les programmeurs débutants, mais cela est essentiel pour créer des systèmes robustes et évolutifs. Avec la pratique et l'étude de ces concepts, les développeurs peuvent maîtriser l'art de la programmation orientée objet et créer des applications Java efficaces et de haute qualité.