suivant: Classe locale
monter: Classes
précédent: Arguments du main
  Table des matières
On peut déclarer des classes à l'intérieur d'autres classes.
Il existe trois constructions:
- classe emboîtée statique ou
static nested class définition d'une classe à l'intérieur
d'une autre classe. La déclaration de
la classe est commune à toutes les instances.
- Purement syntaxique: indique que la classe est une classe ``liée'' à
la classe dans laquelle elle est définie,
- elle est membre de la classe: même accès que les autres membres de la
classe NomClasseEnglobante.Classe
- classe emboîtée ou inner class: la classe est associée à
une instance de la
classe top-level.
- classes internes locales (local inner classes): une
classe interne définie dans du code.
- une classe interne locale n'est pas membre de la classe
- analogue aux variables locales: la classe est présente dans le bloc où
elle est définie,
- accès aux variables de la classe englobante,
- peut être anonyme et éviter de créer une nouvelle classe.
(utile dans le GUI).
Exemples:
Ici Permissions est une classe emboîtée statique.
Le terme officiel est ``top-level nested class''.
C'est un moyen de regrouper des classes. On pourra de l'extérieur
accéder à la classe emboîtée à partir de la classe externe.
Le mot clé static
est obligatoire.
transparent
classe emboîtée
public class BankAccount {
private long number; //numero de compte
private long balance; //balance courante
public static class Permissions{
public boolean canDeposit,
canWithdraw, canClose;
}
//...
}
On peut aussi avoir une classe membre d'une autre classe. Dans ce cas
chaque instance de cette classe membre est associée avec une instance
de la classe englobante.
transparent
BankAccount...
public class BankAccount {
private long number; //numero de compte
private long balance; //balance courante
private Action lastAct; //dernier mouvement fait
public class Action{
private String act;
private long amount;
Action(String act,long amount){
this.act = act;
this.amount = amount;
}
public String toString(){
return number + ":" + act + " " + amount;
}
}
transparent
BankAccount...
public void deposit(long amount){
balance += amount;
lastAct = new Action("deposit",amount);
}
public void withdraw(long amount){
balance -= amount;
lastAct = new Action("withdraw",amount);
}
//...
}
suivant: Classe locale
monter: Classes
précédent: Arguments du main
  Table des matières
Hugues Fauconnier
2002-01-11