Les classes internes anonymes en Java

Qu'est-ce qu'une classe interne anonyme

Une classe interne anonyme est une expression qui se termine par un point-virgule ";" à la fin de sa définition.

Les classes internes anonymes permettent de rendre votre code plus concis, car vous pouvez définir une classe tout en l'instanciant directement. Elles sont similaires aux classes locales, mais contrairement à celles-ci, elles n'ont pas de nom. Si une classe locale n'est utilisée qu'une seule fois, vous pouvez alors opter pour une classe interne anonyme.

Une classe anonyme est une classe sans nom, qui ne peut pas être référencée et ne peut être déclarée qu'avec l'instruction "new" lors de sa création. La déclaration d'une classe anonyme se fait lors de la compilation, tandis que son instanciation a lieu à l'exécution. Cela signifie qu'une instruction "new" dans une boucle créera plusieurs instances de la même classe anonyme, plutôt qu'une instanec de plusieurs classes anonymes différentes.

L'objectif d'une classe anonyme est de fournir une implémentation spécifique à un endroit précis, d'écrire son implémentation à cet endroit, d'obtenir son instance et d'appeler ses méthodes. Il ne faut pas définir d'autres méthodes dans une classe interne anonyme, car elles ne seraient pas visibles.

Exemples :

Gestionnaire gestionnaire = new Gestionnaire(){
    @Override
    public void traiterMessage(@NonNull Message msg) {
        super.traiterMessage(msg);
    }
};

new Processus(){<br></br>    @Override<br></br>    public void executer() {<br></br>        super.executer();<br></br>    }<br></br>};<br></br><br></br>

vue.setOnClickListener(new EcouteurClic() {<br></br>    @Override<br></br>    public void surClic(Vue v) {<br></br><br></br>    }<br></br>});

Format syntaxique

new <classe ou interface> <corps de la classe>

Pourquoi les classes internes sont nécessaires en Java

  1. Chaque classe interne peut indépendamment implémenter une interface, donc peu importe si la classe externe a déjà implémenté une interface particulière, cela n'affecte pas les classes internes. Les classes internes fournissent une solution complète pour l'héritage multiple.
  2. Elles permettent d'organiser ensemble des classes ayant une logique relationnelle, tout en les cachant du monde extérieur.
  3. Elles facilitent la programmation événementielle.
  4. Elles simplifient la programmation multithread.

Rôles des classes internes

Elles offrent une meilleure encapsulation. En effet, contrairement aux classes normales (non internes), les classes internes peuvent avoir des modificateurs d'accès private ou protected. Lorsqu'une classe interne est déclarée private, seule la classe externe peut y accéder, ce qui masque efficacement la classe interne.

Les classes internes peuvent hériter (extends) ou implémenter (implements) d'autres classes ou interfaces, sans être effectées par la classe externe.

Les classes internes peuvent accéder directement aux champs et méthodes de la classe externe, même s'ils sont modifiés par private. Inversement, la classe externe ne peut pas accéder directement aux membres de la classe interne.

Accès aux variables dans le scope des classes internes anonymes

Les classes internes anonymes ont les mêmes droits d'accès aux variables de leur scope que les classes locales.

(1) Une classe interne anonyme peut accéder à tous les membres de la classe externe ;

(2) Une classe interne anonyme ne peut pas accéder aux variables de la classe externe qui ne sont pas modifiées par final (note : à partir de JDK 1.8, ces variables peuvent être accessibles même sans le modificateur final) ;

(3) Masquage des attributs : comme pour les classes imbriquées, les types (comme les variables) définis dans une classe interne anonyme masquent les autres types (variables) du même nom dans leur scope :

Étiquettes: Java classes internes anonymes Programmation orientée objet encapsulation héritage multiple

Publié le 26 juin à 19h08