↑
CHAPITRE 11.1

Classes internes

Définir des classes à l'intérieur d'autres classes
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+)