Classes internes en Java
Dans ce chapitre, nous allons découvrir les classes internes Java.
En Java, une classe peut en imbriquer une autre. La syntaxe est la suivante :
class OuterClass { // 外部类
// ...
class NestedClass { // 嵌套类,或称为内部类
// ...
}
}
Pour accéder à la classe interne, vous pouvez créer un objet de la classe externe, puis créer un objet de la classe interne.
Il existe deux types de classes imbriquées :
- Classe interne non statique
- Classe interne statique
Classe interne non statique
Une classe interne non statique est une classe imbriquée dans une autre classe. Elle a accès aux membres de la classe externe et est souvent appelée classe interne.
Comme la classe interne est imbriquée dans la classe externe, vous devez d'abord instancier la classe externe, puis créer un objet de la classe interne.
Exemple
int x = 10;
class InnerClass {
int y = 5;
}
}
public class MyMainClass {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.y + myOuter.x);
}
}
La sortie de l'exemple ci-dessus est :
15
Classe interne privée
Les classes internes peuvent être modifiées avec private ou protected. Si vous ne voulez pas que la classe interne soit accessible depuis l'extérieur de la classe externe, vous pouvez utiliser le modificateur private :
Exemple
int x = 10;
private class InnerClass {
int y = 5;
}
}
public class MyMainClass {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.y + myOuter.x);
}
}
Dans l'exemple ci-dessus, InnerClass est définie comme une classe interne privée, et son exécution entraînera une erreur :
MyMainClass.java:12: error: OuterClass.InnerClass has private access in OuterClass
OuterClass.InnerClass myInner = myOuter.new InnerClass();
^
Classe interne statique
Les classes internes statiques peuvent être définies à l'aide du mot-clé static. Pour les classes internes statiques, nous n'avons pas besoin de créer une classe externe pour y accéder ; nous pouvons y accéder directement :
Exemple
int x = 10;
static class InnerClass {
int y = 5;
}
}
public class MyMainClass {
public static void main(String[] args) {
OuterClass.InnerClass myInner = new OuterClass.InnerClass();
System.out.println(myInner.y);
}
}
La sortie de l'exemple ci-dessus est :
5
Remarque :Les classes internes statiques ne peuvent pas accéder aux membres de la classe externe.
Accéder aux membres de la classe externe depuis une classe interne
Une utilisation avancée des classes internes est qu'elles peuvent accéder aux propriétés et méthodes de la classe externe :
Exemple
int x = 10;
class InnerClass {
public int myInnerMethod() {
return x;
}
}
}
public class MyMainClass {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.myInnerMethod());
}
}
La sortie de l'exemple ci-dessus est :
10Autres extensions
Objets et classes Java