Leçon 31 : Exploration des classes internes, imbriquées et anonymes
Java permet de définir une classe à l'intérieur d'une autre classe. Cela aide à regrouper des classes logiquement liées et augmente l'encapsulation.
1. Classes imbriquées
Une classe définie à l'intérieur d'une autre classe est appelée une classe imbriquée. Elles sont divisées en deux catégories principales :
A. Classes imbriquées statiques (Static Nested Classes)
- Déclarées avec le mot-clé
static. - Elles se comportent comme des membres statiques : on peut y accéder sans une instance de la classe externe.
- Elles ne peuvent accéder qu'aux membres statiques de la classe externe.
java public class Outer { static class StaticNested { // Accède uniquement aux membres statiques de Outer } } // Accès : Outer.StaticNested nested = new Outer.StaticNested();
B. Classes internes (Inner Classes - Non-statiques)
- Ne peuvent pas être déclarées statiques.
- Elles sont associées à une instance de la classe externe.
- Elles ont accès à tous les membres (statiques et non statiques, même privés) de la classe externe.
java public class Outer { private int x = 10; class Inner { void display() { System.out.println("Outer x = " + x); // Accède au membre privé 'x' } } } // Pour créer un objet Inner, vous avez d'abord besoin d'un objet Outer : // Outer.Inner inner = new Outer().new Inner();
2. Classes locales
Définies à l'intérieur d'une méthode ou d'un bloc. Leur portée est strictement limitée à ce bloc.
3. Classes anonymes
Une classe sans nom, utilisée lorsque vous avez besoin de créer un objet d'une classe (ou interface) qui ne sera utilisé qu'une seule fois.
java interface Printable { void print(); }
public class Example { public void doPrint() { // Classe anonyme implémentant Printable Printable p = new Printable() { @Override public void print() { System.out.println("Impression via une classe anonyme."); } }; p.print(); } }