« Programmation Java/Classes internes » : différence entre les versions

Contenu supprimé Contenu ajouté
Aucun résumé des modifications
(Aucune différence)

Version du 22 juillet 2006 à 23:44

Une classe interne est déclarée à l'intérieur d'une autre classe. Elle peut donc accéder aux membres de la classe externe.

Classe interne statique

Une classe interne statique ne peut accéder qu'aux membres statiques de la classe externe.

Exemple :

public class ClasseExterne
{
    private int compteur = 0;
    private static String nom = "Exemple";

    static class ClasseInterne
    {
        private int index = 0;
        public ClasseInterne()
        {
            System.out.println("Création d'un objet dans "+nom);
            // compteur ne peut être accedé
        }
    }
}

La compilation du fichier ClasseExterne.java produit deux fichiers compilés :

  • ClasseExterne.class contient la classe ClasseExterne uniquement
  • ClasseExterne$ClasseInterne.class contient la classe ClasseInterne

Classe interne non statique

Une classe interne non statique peut accéder aux membres statique de la classe ainsi qu'au membres de l'objet qui l'a créé. En fait, le compilateur créé un membre supplémentaire dans la classe interne référençant l'objet qui la crée.

Exemple :

public class ClasseExterne
{
    private int compteur = 0;

    class ClasseInterne
    {
        private int index = 0;
        public ClasseInterne()
        {
            compteur++;
        }
    }
}

Depuis la classe interne, dans le cas où plusieurs variables ou méthodes portent le même nom dans la classe interne et la classe externe, le pointeur this seul désigne l'instance de la classe interne, tandis que le pointeur this précédé du nom de la classe externe désigne l'instance de la classe externe.

public class ClasseExterne
{
    private int compteur = 10;

    class ClasseInterne
    {
        private int compteur = 0;
        public void count()
        {
            this.compteur++;
            ClasseExterne.this.compteur--;
        }
    }
}