Classes internes de Java
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
public class OuterClass {
private String message = "Hello from Outer Class";
class InnerClass {
void display() {
System.out.println(message);
}
}
public static void main(String[] args) {
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
inner.display();
}
}
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
public class OuterClass {
private static String message = "Hello from Static Nested Class";
static class StaticNestedClass {
void display() {
System.out.println(message);
}
}
public static void main(String[] args) {
OuterClass.StaticNestedClass nested = new OuterClass.StaticNestedClass();
nested.display();
}
}
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
public class OuterClass {
public static void main(String[] args) {
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("Running from Anonymous Inner Class");
}
};
new Thread(runnable).start();
}
}
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.