Les classes internes sont des classes définies à l'intérieur d'une autre classe. Elles permettent d'organiser le code et d'accéder aux membres de la classe externe. Cette section présente les classes internes locales et les classes anonymes.
11.1Classes internes
11.1.1 – Classes internes locales
Une classe interne locale est une classe définie à l'intérieur d'une méthode. Elle n'est accessible que dans cette méthode et peut accéder aux variables locales finales ou effectivement finales de la méthode.
🔑 Caractéristiques
- Définie à l'intérieur d'une méthode
- Accessible uniquement dans la méthode où elle est définie
- Peut accéder aux variables locales finales ou effectivement finales
- Peut accéder aux membres de la classe externe
Exemple : Classe interne locale
public class Externe {
private String nom = "Externe";
public void methode() {
final int valeur = 10; // Variable locale final
// Classe interne locale
class Interne {
public void afficher() {
System.out.println("Classe interne");
System.out.println("Nom externe : " + nom); // Accès à la classe externe
System.out.println("Valeur : " + valeur); // Accès à la variable locale
}
}
Interne i = new Interne();
i.afficher();
}
}
11.1.2 – Classes anonymes
Une classe anonyme est une classe sans nom, définie et instanciée en même temps. Elle est souvent utilisée pour implémenter des interfaces ou étendre des classes de manière concise.
🔑 Syntaxe
Exemple : Classe anonyme implémentant une interface
interface MonInterface {
void afficher();
}
// Classe anonyme
MonInterface obj = new MonInterface() {
@Override
public void afficher() {
System.out.println("Classe anonyme");
}
};
obj.afficher(); // Affiche : Classe anonyme
đź’ˇ Cas d'usage courants
Exemple : Classe anonyme avec Runnable
// Ancienne syntaxe (classe anonyme)
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Exécution dans un thread");
}
});
// Syntaxe moderne (lambda - Java 8+)
Thread thread2 = new Thread(() -> System.out.println("Exécution dans un thread"));
💡 Points clés à retenir
- Classe interne locale : Définie dans une méthode, accessible localement
- Classe anonyme : Sans nom, définie et instanciée en même temps
- Variables locales : Doivent ĂŞtre final ou effectivement finales
- Lambda : Remplace souvent les classes anonymes (Java 8+)