You are on page 1of 3

Les classes internes

Définition
Une classe interne est une classe qui est déclarée à l’intérieur
d’une autre classe.

Cette classe interne devient alors un membre de la classe où elle


a été déclarée au même titre que les champs, les méthodes, les
interfaces.

Il existe actuellement 4 catégories de classes internes :


1. les classes membres statiques
2. les classes membres
3. les classes locales
4. les classes anonymes

1. Les classes membres statiques


Une classe membre statique est déclarée à l’intérieur d’une autre
classe.
La déclaration est précédé du modificateur static.

Propriétés :
- Une classe membre statique accède à tous les membres
statiques de la classe englobante et inversement c. à d. la classe
englobante a accès à tous les membres (même privés) de la classe
membre statique.

- Le modificateur static fait que cette classe interne est associée à


la classe englobante et non à une instance de la classe englobante
(possibilité d’utiliser la classe interne statique sans instancier la
classe englobante).

- L’accès à un champ ou une méthode d’une classe interne


statique se fait logiquement en préfixant de façon hiérarchique, le
champ ou la méthode avec le nom de la classe interne et le nom
de la classe englobante.

- En tant que membre d’une classe, l’accès aux classes membres


statiques peut être régi par les modificateurs habituels.

- Les classes membres statiques ne peuvent être définies qu’au


sein de classes (non statiques) de plus haut niveau, c’est-à-dire
de classes qui ne sont incluses dans aucune autre.
2. Les classes membres

Une classe membre est une classe dont la déclaration est


contenue dans une autre classe. Une classe membre est, à la
différence d’une classe membre statique, associée à une instance
dérivée de la classe englobante.

Une classe membre a accès aux champs et aux méthodes


d’instance, ainsi qu’aux membres statiques de la classe
englobante, même s’ils sont déclarés private.

- Une classe membre peut recevoir les mêmes modificateurs


d’accès que les autres membres de la classe.

- Une classe membre ne peut pas comporter de méthode de classe


ni de champ de classe à l’exception des champs de classe déclarés
final (c. à d. des constantes)

- On ne peut pas emboîter une interface en tant que classe


membre car une interface ne peut être instanciée.

- Pour faire référence à un champ de la classe englobante il faut


préfixer this avec le nom de la classe englobante

- Chaque instance de la classe membre est associée à une


instance de la classe englobante.

3. Les classes locales

Les classes locales sont aux classes membres ce que sont les
variables locales aux champs.

Elles sont déclarées au sein d’un bloc de code :


- dans une méthode

Portée
- La portée de la classe est limitée au bloc de code.

- Une classe locale peut accéder à tous les membres de la classe


englobante.
- Elle a accès aux variables locales et aux paramètres déclarés
finaux (car en fait il y a copie de ces variables, c’est pourquoi elles
doivent être final pour être sûr que leurs valeurs ne changent
pas) qui sont dans la portée de la déclaration.

- La classe locale n’a pas d’existence en dehors du bloc de


définition
- Pas de modificateurs acceptés
- Pas de membres déclarés static sauf s’ils sont également
déclarés final
- Pas d’interface en tant que classe locale
- Une classe locale existe par rapport à une instance de la classe
englobante, cette instance est implicitement transmise aux
constructeurs de la classe locale.

4. Les classes anonymes


Une classe anonyme est une classe locale non nommée.

Sa définition prend la forme d’une expression. Une classe


anonyme est définie et instanciée en une seule expression à l’aide
de l’opérateur new.
Les classes anonymes sont entre autres utilisées pour
implémenter les classes d’adaptation (Swing.)

Syntaxe : new Nom_de_classe() { déclaration }

You might also like