13.13 Héritage et polymorphisme en Java : classes internes et héritage
La programmation orientée objet (POO) est un paradigme de développement qui permet aux programmeurs de créer des programmes basés sur le concept d'« objets », pouvant contenir des données et des méthodes permettant de manipuler ces données. Java, étant un langage orienté objet, offre des mécanismes robustes pour implémenter l'héritage et le polymorphisme, y compris l'utilisation de classes internes. Dans ce chapitre, nous explorerons comment l'héritage et le polymorphisme se manifestent dans le contexte des classes internes en Java.
Héritage en Java
L'héritage est un principe fondamental de la POO qui vous permet de créer une nouvelle classe basée sur une classe existante. La nouvelle classe, appelée classe dérivée ou sous-classe, hérite des attributs et des méthodes de la classe de base, également appelée superclasse. En Java, l'héritage s'effectue avec le mot-clé extends
.
Classes internes
En Java, il est possible de définir une classe au sein d'une autre classe. Celles-ci sont appelées classes internes et peuvent être classées en quatre types :
- Classe interne standard : une classe définie dans la portée d'une autre classe.
- Classe interne statique : une classe interne déclarée comme statique. Il est accessible sans avoir besoin d'une instance de la classe externe.
- Classe interne locale : classe définie dans un bloc de code, telle qu'une méthode.
- Classe anonyme : classe sans nom définie et instanciée dans une seule expression.
Héritage avec les classes internes
Lorsqu'une classe interne étend une autre classe, elle hérite de ses attributs et méthodes. Cela permet la réutilisation du code et la création de hiérarchies de classes plus complexes. De plus, une classe interne peut accéder aux membres de sa classe externe, même s'ils sont privés.
Prenons l'exemple suivant :
classe publique Externe {
message de chaîne privé = "Bonjour tout le monde !";
La classe interne étend OtherClass {
void displayMessage() {
System.out.println(message); // Accès au membre privé de la classe externe
}
}
}
classe AutreClasse {
public void uneMéthode() {
// Mise en œuvre
}
}
La classe Internal
est une classe interne de la classe External
et étend OtherClass
. Il peut accéder au message
membre privé de la classe External
sans aucun problème.
Polymorphisme
Le polymorphisme est un autre concept clé de la POO qui permet à un objet d'être traité comme une instance de sa propre classe ou de toute classe dont il hérite. En Java, le polymorphisme est généralement implémenté via des méthodes et des interfaces de remplacement.
Lorsqu'une classe interne remplace une méthode de sa superclasse, elle utilise le polymorphisme pour fournir une implémentation spécifique de cette méthode. Ceci est particulièrement utile lorsque l'on souhaite modifier le comportement des méthodes héritées dans des contextes spécifiques de la classe externe.
Voir l'exemple suivant :
classe publique Externe {
// ... autres membres de la classe Externe ...
La classe interne étend OtherClass {
@Passer outre
public void uneMéthode() {
System.out.println("Méthode écrasée dans la classe interne.");
}
}
}
Dans l'exemple ci-dessus, la classe Internal
remplace la méthode someMethod
de la classe OutraClass
. Lorsqu'un objet de la classe Internal
appelle someMethod
, la version remplacée est exécutée.
Considérations finales
L'héritage et le polymorphisme sont des concepts puissants qui vous permettent de créer du code réutilisable et extensible. Les classes internes en Java offrent un moyen d'organiser le code de manière plus étroite et intégrée à la classe externe, tout en conservant la possibilité d'hériter d'autres classes et d'implémenter le polymorphisme.
Il est important de noter que bien que les classes internes puissent accéder à tous les membres (y compris privés) de la classe externe, la classe externe n'a pas d'accès direct aux membres de la classe interne. De plus, l'utilisation de classes internes doit être bien pensée, car elles peuvent compliquer la conception de votre programme si elles sont utilisées sans discrétion.
Comprendre comment l'héritage et le polymorphisme fonctionnent en conjonction avec les classes internes est essentiel pour tout développeur Java qui souhaite maîtriser le langage et écrire du code efficace et organisé.