Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
Maîtriser les classes internes anonymes en Java
Découvrez comment définir, implémenter et exploiter les classes internes anonymes en Java avec des exemples clairs et réels.
En Java, une classe peut en imbriquer une autre – une classe interne. Quand cette classe interne n'a pas de nom explicite, on l'appelle classe interne anonyme.
Les classes internes anonymes sont définies en ligne au sein d'une autre classe ou expression. Comme elles n'ont pas de nom, elles sont créées seulement quand le code englobant s'exécute, les rendant idéales pour des implémentations courtes, à usage unique.
Le motif typique est :
class OuterClass { // créer une instance de classe interne anonyme Type instance = new Type(paramètres) { // méthodes redéfinies ou comportement additionnel }; }
Ici, Type peut être soit :
- une superclasse que la classe anonyme étend
- une interface que la classe anonyme implémente
À l'exécution, l'instruction ci-dessus construit une instance de la classe anonyme, qui peut alors être utilisée via le type de référence déclaré.
Important : Comme la déclaration est une expression, le point-virgule de fin termine l'instruction, pas le corps de la classe.
Exemple 1 : Étendre une classe avec une classe interne anonyme
class Polygon { public void display() { System.out.println("Inside the Polygon class"); } } class AnonymousDemo { public void createClass() { Polygon p1 = new Polygon() { @Override public void display() { System.out.println("Inside an anonymous class."); } }; p1.display(); } } public class Main { public static void main(String[] args) { new AnonymousDemo().createClass(); } }
Sortie
Inside an anonymous class.
Dans cette illustration, la classe anonyme étend Polygon et redéfinit display(). Quand createClass() s'exécute, une instance de la sous-classe anonyme est créée, et sa méthode redéfinie est invoquée.
Exemple 2 : Implémenter une interface avec une classe interne anonyme
interface Polygon { void display(); } class AnonymousDemo { public void createClass() { Polygon p1 = new Polygon() { @Override public void display() { System.out.println("Inside an anonymous class."); } }; p1.display(); } } public class Main { public static void main(String[] args) { new AnonymousDemo().createClass(); } }
Sortie
Inside an anonymous class.
Ici, la classe anonyme implémente l'interface Polygon, fournissant l'implémentation de méthode requise dans un bloc unique et concis.
Pourquoi utiliser les classes internes anonymes ?
Les classes internes anonymes brillent dans les scénarios où vous avez besoin d'une implémentation brève et contextuelle :
- Écouteurs d'événements et callbacks dans les frameworks GUI – attachez facilement un comportement sans créer de classe nommée séparée.
- Création de threads via
Runnable– écrivez la logique d'exécution en ligne. - Adaptateurs ou wrappers locaux – redéfinissez quelques méthodes d'une classe existante.
Avantages :
- Concision – pas de fichier séparé ou déclaration de classe.
- Contrôle de portée – la classe n'est visible que là où elle est définie.
- Flexibilité d'exécution – les instances sont créées seulement quand nécessaire.
Pour une logique plus large et réutilisable, envisagez des classes nommées ou des expressions lambda (pour les interfaces fonctionnelles) pour garder le code maintenable.
Java
- Comprendre le mot-clé final en Java : variables, méthodes et classes
- L'opérateur instanceof en Java : guide complet
- Maîtriser l'héritage Java : concepts, types et exemples pratiques
- Comprendre les classes imbriquées statiques en Java : utilisation, différences et exemples
- Le pattern Singleton en Java expliqué : implémentation et utilisation sûre
- Maîtriser la réflexion Java : inspection des classes, méthodes et champs à l'exécution
- Maîtriser Java ObjectOutputStream : Sérialisation, méthodes et exemples pratiques
- Maîtriser les génériques Java : Construire du code réutilisable et type-safe
- Maîtriser les opérations sur les fichiers Java avec java.io – Création, lecture, écriture et suppression