Skip Navigation Links
Accueil
Java Standard EditionExpand Java Standard Edition
Java EE 5Expand Java EE 5
Visual Basic .Net 2005Expand Visual Basic .Net 2005
Visual C++ .Net 2005Expand Visual C++ .Net 2005
Visual C# .Net 2005Expand Visual C# .Net 2005
Cours ASP .Net 2.0Expand Cours ASP .Net 2.0
PostgresqlExpand Postgresql
LinuxExpand Linux
Visual Studio 2008Expand Visual Studio 2008
ASP 3.0 ClassiqueExpand ASP 3.0 Classique
Cours Javascript - DOM - DHTMLExpand Cours Javascript - DOM - DHTML
Cours AjaxExpand Cours Ajax
VBAExpand VBA
AssembleurExpand Assembleur
PerlExpand Perl
MembresExpand Membres
L'auteur du site
Nouveautés sur le site
Contacts
Plan du site
Accueil > Java Standard Edition > Classes anonymes et internes locales
____________________________________________________________________________________________________
Connexion

Java SE - Les classes internes locales et les classes anonymes

Sommaire :

I) Définition
II) Les classes internes locales
III) Les classes anonymes
   III-1) Définition
   III-2) Syntaxe des classes anonymes
IV) Code source complet de l'exemple
   IV-1) Classe FrameUnBouton(package presentation)
   IV-2) Classe Main(package main)
V) Téléchargement de l'exemple

I) Définition

Les classes internes locales, et les classes anonymes, sont des classes internes non static (voyez le chapitre sur les classes internes éventuellement).

Extrait java.sun.com:
"Additionally, there are two special kinds of inner classes: local classes and anonymous classes (also called anonymous inner classes)."

et

"There are two additional types of inner classes. You can declare an inner class within the body of a method. Such a class is known as a local inner class. You can also declare an inner class within the body of a method without naming it. These classes are known as anonymous inner classes. You will encounter such classes in advanced Java programming."

Une classe interne locale est une classe interne non static déclarée à l'intérieur d'une méthode.
Une classe anonyme est une classe interne locale qui n'a pas de nom.

II) Les classes internes locales

Comme nous venons de le voir, une classe interne locale est une classe interne non static( inner class), déclarée dans le body d'une méthode.

Par conséquent, les attributs et méthodes d'instance de la classe englobante sont accessibles, et avec la même syntaxe que pour les classes internes non static. Les variables locales de la méthode en question, sont accessibles si elles sont final (c'est à dire les constantes).

Aucun modificateur d'accès n'est autorisé pour la classe interne locale( ni private, ni public, etc). Elle est visible uniquement localement, c'est à dire uniquement dans le bloc où elle a été déclarée.

Exemple faisant partie du projet d'exemple:

III) Les classes anonymes

III-1) Définition

Une classe anonyme est une classe interne locale qui ne possède pas de nom. En effet, dans certains cas, il n'est pas utile de nommer une classe, car on ne va l'utiliser qu'une seule fois!

L'exemple typique est celui des évènements AWT. Dans l'exemple ci-dessous, on a besoin de créer un objet d'une classe héritant de MouseAdapter, et contenant notre méthode mouseReleased. Et on veut donner cet objet à la méthode addMouseListener de notre bouton. La classe ne servira ici qu'à créer l'objet, et plus jamais après. Inutile de la nommer. On utilise une classe anonyme.

III-2) Syntaxe des classes anonymes

Notre exemple:
C'est d'abord une classe interne locale, elle se situe dans une méthode.
On effectue obligatoirement un new en même temps que la déclaration de classe, et d'ailleurs c'est la seule instanciation qu'on pourra faire avec cette classe.
N'ayant pas de nom, cette classe ne sera plus jamais accessible.

Le new effectuera une instanciation de notre classe anonyme, et non pas de la classe indiquée juste après le new, qui est la classe dont hérite la classe anonyme.

Il ne peut pas y avoir de constructeur dans une classe anonyme, car elle n'a pas de nom. C'est le constructeur de la superclasse qui est utilisé, selon les paramètres qui suivent le new.

Dans le cas où la superclasse est une interface, la classe anonyme implémentera cette interface. Et elle héritera de Object.

Remarquez dans la syntaxe qu'un ";" figure après le bloc contenant la classe, car c'est bien la fin de la ligne du new.

Une classe anonyme est considérée comme final. Par conséquent, elle ne peut être abstraite.

L'objet créé est un objet du type de notre classe anonyme, mais, n'ayant pas de nom, on peut utiliser le fait que notre objet est également du type de la superclasse ou de l'interface(quand on aura besoin du type de notre objet).

Remarque: ceci implique qu'on ne pourra pas amener de nouvelles méthodes public à une classe anonyme, car on mettra l'objet dans une variable du type de la classe mère ou de l'interface.
Ceci implique qu'on ne pourrait pas accéder aux nouvelles méthodes, même si on en avait écrites dans la classe anonyme(comme le montre la méthode maMeth de l'exemple). En effet, on ne pourra pas caster la variable contenant notre objet, car on n'a pas le nom de la classe anonyme.

IV) Code source complet de l'exemple

IV-1) Classe FrameUnBouton(package presentation)

IV-2) Classe Main(package main)

Téléchargement de l'exemple

Projet d'exemple, V1.0

RETOUR HAUT