Sobes.tech
Middle

Qu'est-ce que les classes imbriquées et comment sont-elles utilisées en programmation?

sobes.tech IA

Réponse de l'IA

Les classes imbriquées sont des classes déclarées à l'intérieur d'une autre classe. Elles permettent de regrouper logiquement des classes utilisées uniquement à un endroit, augmentent l'encapsulation et rendent le code plus lisible.

Les classes imbriquées sont :

  • Statiques (Classes imbriquées statiques) : n'ont pas accès aux membres non statiques de la classe externe. Elles peuvent être créées sans instance de la classe externe.
  • Non statiques (Classes internes) : ont accès à tous les membres de la classe externe (y compris privés). Pour créer une instance d'une classe interne non statique, une instance de la classe externe est requise.

Applications :

  • Cacher l'implémentation : La classe imbriquée peut être utilisée comme une classe auxiliaire, dont les détails d'implémentation ne doivent pas être accessibles de l'extérieur.
  • Regroupement : Union logique de classes étroitement liées.
  • Implémentation de callbacks / écouteurs : Souvent utilisé pour créer des classes internes anonymes pour implémenter des interfaces ou des classes abstraites.
  • Itérateurs : La classe interne est pratique pour implémenter un itérateur, car elle a accès à l'état interne de la collection.

Exemple (Java) :

class OuterClass {
    private int outerField;

    // Classe imbriquée statique
    static class StaticNestedClass {
        void print() {
            // N'a pas accès à outerField
            System.out.println("Depuis StaticNestedClass");
        }
    }

    // Classe interne non statique
    class InnerClass {
        void print() {
            // A accès à outerField
            System.out.println("outerField : " + outerField);
        }
    }
}
// Création d'une instance de la classe imbriquée statique
OuterClass.StaticNestedClass staticNested = new OuterClass.StaticNestedClass();
staticNested.print();

// Création d'une instance de la classe interne
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
inner.print();