Middle
Quelle est la différence entre les classes imbriquées (nested) et les classes internes (inner) en Java?
sobes.tech IA
Réponse de l'IA
-
Classes imbriquées (Nested classes) : Membres statiques de la classe externe. N'ont pas accès directement aux membres non statiques (champs et méthodes) de la classe externe, seulement via une instance de la classe externe. Déclarées avec le mot-clé
static. -
Classes internes (Inner classes) : Membres non statiques de la classe externe. Ont un accès complet à tous les membres (statiques et non statiques) de la classe externe, y compris privés. Pour créer une instance d'une classe interne, une instance de la classe externe est nécessaire. N'utilisent pas le mot-clé
static.
Exemple :
// Classe externe
class Outer {
private int outerField = 10;
private static int staticOuterField = 20;
// Classe imbriquée statique
static class StaticNestedClass {
void display() {
// Accès uniquement aux membres statiques de la classe externe
System.out.println("Nested statique : " + staticOuterField);
// Pas d'accès direct à outerField
// System.out.println(outerField); // Erreur de compilation
}
}
// Classe interne non statique
class InnerClass {
void display() {
// Accès à tous les membres de la classe externe
System.out.println("Interne : " + outerField);
System.out.println("Interne (statique) : " + staticOuterField);
}
}
}
// Utilisation
public class Main {
public static void main(String[] args) {
// Création d'une instance de la classe imbriquée statique
Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
staticNested.display();
// Création d'une instance de la classe interne nécessite une instance de la classe externe
Outer outer = new Outer();
Outer.InnerClass inner = outer.new InnerClass();
inner.display();
}
}
| Caractéristique | Classe imbriquée (Nested Class) | Classe interne (Inner Class) |
|---|---|---|
| Mot-clé | static |
Non |
| Accès aux membres de la classe externe | Seulement statiques | Tous |
| Nécessite une instance de la classe externe pour créer une instance | Non | Oui |
| Lien avec l'instance de la classe externe | Non | Oui |