Les classes internes (inner classes) peuvent être situées à différent niveau d'une classe normale. Elles représentent une particularité intéressante et subtile de la programmation avec le langage Java.

class ClasseParente {
  modificateur class ClasseInterne 
                          [extends SuperClasse] 
                          [implements ListeInterfaces] {
    // Instructions...
  }

  modificateur interface InterfaceInterne {
    // Instructions...
  }

  // Instructions...
}

Il existe quatre types de classes imbriquées :

  • les classes internes simples, définies au niveau des classes,
  • les classes internes statiques, représentant une classe de sommet intérieure,
  • les classes locales, définies au niveau des méthodes,
  • les classes internes anonymes, définies au niveau d'une instance.

Les interfaces peuvent être également déclarées à n'importe quel endroit d'une classe.

Une classe interne peut définir de la même manière, une à plusieurs autres classes internes.

Les classes internes après la compilation sont enregistrées dans un fichier .class particulier.

ClasseParente$ClasseInterne.class

Les fichiers stockant des classes locales possèdent un format différent incluant un identificateur numérique représentant la méthode d'inclusion.

ClasseExterne$1$ClasseLocale.class

Les classes anonymes sont stockées dans un format distinct incluant, lui aussi, un identificateur numérique représentant l'instance d'inclusion.

ClasseExterne$1.class

De cette façon, le nom d'une classe interne peut être identique à celui d'une autre sans pour autant créer d'ambiguités, lors de l'emploi de l'une ou l'autre des classes.

Chaque type de classes ou interfaces intérieures possèdent des spécifités programmatiques propres.

Sommaire