Notes sur les classes membres



Qu'est qu'une classe membre ?


Une classe membre est une classe dont la definition est contenue dans une autre classe.

Exemple


Fichier test.java
public class test
{
  public static void main (String[] atgv)
  {
    Englobeur en = new Englobeur(10);
    System.out.println(" ");
    en.m1.Info();
    System.out.println(" ");
    en.m2.Info();
    System.out.println(" ");
    en.m1.i1.Info();
    System.out.println(" ");
    en.m2.i2.Info();
  }
}

class Englobeur
{
  int numero_sup;
  Membre_1 m1;
  Membre_2 m2;
  
  Englobeur(int v)
  {
    numero_sup = v;
    System.out.println("Creation [Emglobeur] numero "+ numero_sup);
    m1 = new Membre_1(v+1);
    m2 = new Membre_2(v+2);
  }
  
  class Membre_1
  {
    int numero_inf_1;
    Invite_1 i1;
    
    Membre_1(int v)
    {
      numero_inf_1 = v;
      System.out.println("Creation [Membre] numero "+ numero_inf_1);
      i1 = new Invite_1(v+1);
    }
    
    void Info()
    {
      System.out.println("[Membre_1] : "+ numero_inf_1);
      System.out.println("[Membre_2] : "+ m2.numero_inf_2);
      System.out.println("[Englobeur] : "+ numero_sup);
    }
    
    class Invite_1
    {
      int invite_1;
      
      Invite_1(int v)
      {
        invite_1 = v;
        System.out.println(">> [Invite_1] : "+ invite_1);
      }

      void Info()
      {
        System.out.println("[Membre_1] : "+ numero_inf_1);
        System.out.println("[Membre_2] : "+ m2.numero_inf_2);
        System.out.println("[Englobeur] : "+ numero_sup);
        System.out.println("[Invite_1] : "+ invite_1);
        System.out.println("[Invite_2] : "+ m2.i2.invite_2);
      }
    }
  }

  class Membre_2
  {
    int numero_inf_2;
    Invite_2 i2;
    
    Membre_2(int v)
    {
      numero_inf_2 = v;
      System.out.println("Creation [Membre] numero "+ numero_inf_2);
      i2 = new Invite_2(v+1);
    }
    
    void Info()
    {
      System.out.println("[Membre_1] : "+ m1.numero_inf_1);
      System.out.println("[Membre_2] : "+ numero_inf_2);
      System.out.println("[Englobeur] : "+ numero_sup);
    }

    class Invite_2
    {
      int invite_2;
      
      Invite_2(int v)
      {
        invite_2 = v;
        System.out.println(">> [Invite_2] : "+ invite_2);
      }

      void Info()
      {
        System.out.println("[Membre_1] : "+ m1.numero_inf_1);
        System.out.println("[Membre_2] : "+ numero_inf_2);
        System.out.println("[Englobeur] : "+ numero_sup);
        System.out.println("[Invite_2] : "+ invite_2);
        System.out.println("[Invite_1] : "+ m1.i1.invite_1);
      }
    }
  }
}


A l'execution on obtient l'affichage suivant:

Creation [Emglobeur] numero 10
Creation [Membre] numero 11
>> [Invite_1] : 12
Creation [Membre] numero 12
>> [Invite_2] : 13
 
[Membre_1] : 11
[Membre_2] : 12
[Englobeur] : 10
 
[Membre_1] : 11
[Membre_2] : 12
[Englobeur] : 10
 
[Membre_1] : 11
[Membre_2] : 12
[Englobeur] : 10
[Invite_1] : 12
[Invite_2] : 13
 
[Membre_1] : 11
[Membre_2] : 12
[Englobeur] : 10
[Invite_2] : 13
[Invite_1] : 12
  


Note: remarquer les noms des classes generes par la compilation de ce programme.

  • test.class
  • Englobeur.class
  • Englobeur$Membre_1.class
  • Englobeur$Membre_2.class
  • Englobeur$Membre_1$Invite_1.class
  • Englobeur$Membre_2$Invite_2.class


Instanciation d'une classe membre



L'exemple suivant montre comment instancier une classe membre.

Fichier test.java
public class test
{
  public static void main (String[] atgv)
  {
    System.out.println(">> \"classe\".");
    classe cl = new classe();

    System.out.println(">> \"interieur\".");
    classe.interieur in = cl.new interieur();
  }
}

class classe
{
  classe()
  {
    System.out.println("Creation d'une instance de classe \"classe\".");
  }
  
  class interieur
  {
    interieur()
    {
      System.out.println("Creation d'une instance de classe \"interieur\".");
    }
  }

}


A l'execution on obtient l'affichage suivant:

C:\programmes\java>java test
>> "classe".
Creation d'une instance de classe "classe".
>> "interieur".
Creation d'une instance de classe "interieur"