Lors de l'implémentation d'une classe interne, dois-je déclarer ses attributs et ses méthodes, c'est-à-dire public, privé, protégé?
Cela dépend entièrement de la façon dont vous voulez que la classe interne se comporte. Par défaut, une classe interne est non statique:
public class Example1
{
int a;
public class Example2
{
int b;
void test() {}
}
}
Une classe interne non-statique peut être instancié uniquement à l'intérieur d'une méthode non statique de la classe externe. En effet, chaque instance d'une classe interne non statique doit être associée à une instance de la classe externe. Dans un sens, chaque instance d'une classe interne non statique existe à l'intérieur d'une instance de la classe externe. Une seule instance de la classe externe peut lui avoir associé plusieurs instances de la classe interne. Comme une instance d'une classe interne non statique a une instance associée de la classe externe, les méthodes de la classe interne peuvent accéder directement à l'un des membres (champs ou méthodes) de l'instance de classe externe. Par exemple, la méthode de test définie ci-dessus peut accéder directement à a et à b directement
Une classe définie dans une autre classe est appelée une classe imbriquée. Comme les autres membres d'une classe, une classe imbriquée peut être déclarée statique ou non. Une classe imbriquée non statique est appelée une classe interne. Une instance d'une classe interne ne peut exister que dans une instance de sa classe englobante et a accès aux membres de sa classe englobante même si elle est déclarée privée. Le tableau suivant indique les types de classes imbriquées:
Types de emboîtées Classes de type Portée intérieure membre de classe imbriquée statique pas intérieure classe [non statique] Membre de classe oui classe locale locale oui anonyme uniquement le point où il est défini oui
http://java.sun.com/docs/books/tutorial/java/javaOO/nested.html – JRL