Quels sont les types de classes imbriquées dans le langage de programmation?
sobes.tech IA
Réponse de l'IA
Classes imbriquées en Java:
-
Classes imbriquées statiques (Static Nested Classes) : Se comportent comme des membres statiques normaux de la classe. N'ont pas accès aux membres non statiques de la classe externe. Sont créées sans instance de la classe externe.
public class Outer { private static String staticMsg = "Message statique"; private String instanceMsg = "Message d'instance"; static class StaticNested { void displayStatic() { // Accès aux membres statiques de la classe externe System.out.println(staticMsg); // Pas d'accès aux membres non statiques de la classe externe // System.out.println(instanceMsg); // Erreur de compilation } } } -
Classes internes (Inner Classes) : Liées à une instance de la classe externe. Ont un accès complet à tous les membres (statiques et non-statiques) de la classe externe, y compris privés. Peuvent être déclarées
private,protected,package-privateoupublic.public class Outer { private static String staticMsg = "Message statique"; private String instanceMsg = "Message d'instance"; class Inner { void display() { // Accès aux membres statiques et non-statiques de la classe externe System.out.println(staticMsg); System.out.println(instanceMsg); } } } -
Classes locales (Local Classes) : Déclarées à l'intérieur d'un bloc (méthode, constructeur ou initialisateur statique). Disponibles uniquement dans ce bloc. Peuvent accéder aux variables locales et paramètres du bloc qui sont
finalou effectifsfinal, ainsi qu'à tous les membres de la classe externe.public class Outer { private String instanceMsg = "Message d'instance"; void methodWithLocalClass() { final String localVar = "Variable locale"; // ou effectif `final` class Local { void display() { System.out.println(instanceMsg); System.out.println(localVar); } } Local localObj = new Local(); localObj.display(); } } -
Classes anonymes (Anonymous Classes) : Sont des classes locales sans nom. Utilisées pour déclarer et créer une instance d'une classe en même temps, qui implémente une interface ou étend une classe. Utile pour créer de petits objets à usage unique.
public class Outer { void methodWithAnonymousClass() { // Classe anonyme implémentant l'interface Runnable Runnable myRunnable = new Runnable() { @Override public void run() { System.out.println("Exécution depuis classe anonyme"); } }; new Thread(myRunnable).start(); // Classe anonyme étendant la classe Thread Thread myThread = new Thread() { @Override public void run() { System.out.println("Exécution depuis classe anonyme étendant Thread"); } }; myThread.start(); } }
Comparaison des types de classes imbriquées:
| Type de classe | Lieu de déclaration | Accès aux membres de la classe externe | Nécessite une instance de la classe externe pour la créer | Modificateurs d'accès |
|---|---|---|---|---|
| Classe imbriquée statique | À l'intérieur de la classe, avec le mot-clé static. |
Seulement aux membres statiques. | Non | Tous |
| Classe interne | À l'intérieur de la classe (non statique). | À tous (statiques et non-statiques). | Oui | Tous |
| Classe locale | À l'intérieur d'un bloc (méthodes, constructeurs, initialisateurs). | À tous les membres de la classe externe + variables locales final ou effectives final. |
Oui | Non (final ou abstract implicite) |
| Classe anonyme | À l'intérieur d'un bloc (expression). | À tous les membres de la classe externe + variables locales final ou effectives final. |
Oui | Non |