Les classes internes Java sont des classes définies à l'intérieur d'une autre classe. Ils sont utilisés pour regrouper logiquement les classes qui ne sont utilisées qu'à un seul endroit, pour augmenter l'encapsulation et pour rendre le code plus lisible et plus facile à maintenir. Les classes internes peuvent accéder aux membres (y compris les membres privés) de la classe externe.
Types de classes internes
Classe imbriquée non statique (classe intérieure): Associé à une instance de la classe extérieure.
Classe statique imbriquée: N'est pas associé à une instance de la classe extérieure et ne peut accéder qu'aux membres statiques de la classe extérieure.
Classe intérieure locale: Défini dans un bloc, généralement une méthode.
Classe intérieure anonyme: Une classe sans nom, utilisée pour instancier des objets avec certaines fonctionnalités "à la volée".
Exemples
Exemple 1 : Classe intérieure non statique
publicclassOuterClass{privateString message ="Hello from Outer Class";classInnerClass{voiddisplay(){System.out.println(message);}}publicstaticvoidmain(String[] args){OuterClass outer =newOuterClass();OuterClass.InnerClass inner = outer.newInnerClass();
inner.display();}}Propulsé par
Dans cet exemple, InnerClass est une classe interne non statique. Il peut accéder au champ message de OuterClass. Une instance de InnerClass est créée à partir d'une instance de OuterClass.
Exemple 2 : Classe statique imbriquée
publicclassOuterClass{privatestaticString message ="Hello from Static Nested Class";staticclassStaticNestedClass{voiddisplay(){System.out.println(message);}}publicstaticvoidmain(String[] args){OuterClass.StaticNestedClass nested =newOuterClass.StaticNestedClass();
nested.display();}}Propulsé par
Ici, StaticNestedClass est une classe statique imbriquée. Il peut accéder directement aux membres statiques de OuterClass. Aucune instance de OuterClass n'est nécessaire pour créer une instance de StaticNestedClass.
Exemple 3 : Classe interne anonyme
publicclassOuterClass{publicstaticvoidmain(String[] args){Runnable runnable =newRunnable(){@Overridepublicvoidrun(){System.out.println("Running from Anonymous Inner Class");}};newThread(runnable).start();}}Propulsé par
Cet exemple présente une classe interne anonyme mettant en œuvre l'interface Runnable. Il est utilisé pour fournir une implémentation spécifique de la méthode run à la volée.
Conseils et bonnes pratiques
Utilisez-le avec parcimonie: Les classes internes peuvent rendre le code plus difficile à lire si elles sont utilisées à l'excès. Utilisez-les lorsqu'ils appartiennent logiquement à la classe extérieure.
Classes anonymes: Idéal pour la mise en œuvre d'interfaces ou de classes abstraites avec un petit nombre de fonctionnalités.
Accès aux membres: Les classes internes peuvent accéder à tous les membres de la classe externe, y compris les membres privés, ce qui les rend utiles pour l'encapsulation.
Classes statiques imbriquées: A utiliser lorsque la classe imbriquée n'a pas besoin d'accéder aux membres de l'instance de la classe externe.
Évitez la complexité: Gardez les classes internes simples pour éviter d'augmenter la complexité de la classe externe.
Les classes internes Java sont des classes définies à l'intérieur d'une autre classe. Ils sont utilisés pour regrouper logiquement les classes qui ne sont utilisées qu'à un seul endroit, pour augmenter l'encapsulation et pour rendre le code plus lisible et plus facile à maintenir. Les classes internes peuvent accéder aux membres (y compris les membres privés) de la classe externe.
Types de classes internes
Exemples
Exemple 1 : Classe intérieure non statique
Dans cet exemple,
InnerClassest une classe interne non statique. Il peut accéder au champmessagedeOuterClass. Une instance deInnerClassest créée à partir d'une instance deOuterClass.Exemple 2 : Classe statique imbriquée
Ici,
StaticNestedClassest une classe statique imbriquée. Il peut accéder directement aux membres statiques deOuterClass. Aucune instance deOuterClassn'est nécessaire pour créer une instance deStaticNestedClass.Exemple 3 : Classe interne anonyme
Cet exemple présente une classe interne anonyme mettant en œuvre l'interface
Runnable. Il est utilisé pour fournir une implémentation spécifique de la méthoderunà la volée.Conseils et bonnes pratiques