376 votes

Java : Classe interne statique ou non statique

Quelle est la différence entre une classe interne statique et non statique ?

577voto

Brandon E Taylor Points 10927

Une classe interne ne peut pas être statique, je vais donc reformuler votre question en "Quelle est la différence entre des classes imbriquées statiques et non statiques ?

Une classe imbriquée non statique (ou "classe interne") a un accès complet aux membres de la classe dans laquelle elle est imbriquée. Une classe imbriquée statique ne possède pas de référence à une instance d'imbrication, de sorte qu'une classe imbriquée statique ne peut pas invoquer de méthodes non statiques ou accéder à des champs non statiques d'une instance de la classe dans laquelle elle est imbriquée.

139voto

Steve McLeod Points 19016

Cherchons dans la source de la sagesse pour de telles questions : "Effective Java" de Joshua Bloch :

Techniquement, il n'existe pas de classe interne statique. Selon "Effective Java", la terminologie correcte est "classe imbriquée statique". Une classe imbriquée non statique est en effet une classe interne, tout comme les classes anonymes et les classes locales.

Et maintenant, je cite : "Chaque instance d'une classe non statique [imbriquée] est implicitement associée à une instance de clôture de sa classe contenante... Il est possible d'invoquer des méthodes sur l'instance englobante."

Une classe statique imbriquée n'a pas accès à l'instance qui l'entoure. Elle utilise également moins d'espace.

17voto

abishkar bhattarai Points 1073

La classe interne statique ne peut pas accéder aux membres non statiques de la classe principale, mais elle peut accéder directement aux membres statiques (champ d'instance et méthodes de la classe principale) de la même manière que le style procédural qui consiste à obtenir une valeur sans créer d'objet.

La classe interne statique peut déclarer des membres statiques et non statiques. Les méthodes statiques ont accès aux membres statiques de la classe principale, mais elles ne peuvent pas accéder aux membres non statiques de la classe interne. Pour accéder aux membres de la classe interne non statique, il faut créer un objet de la classe interne non statique.

Une classe interne non statique ne peut pas déclarer de champs et de méthodes statiques. Elle doit être déclarée dans des types statiques ou de niveau supérieur. Vous obtiendrez cette erreur en faisant cela, en disant "les champs statiques ne peuvent être déclarés que dans des types statiques ou de niveau supérieur".

4) Une classe interne non statique peut accéder aux membres statiques et non statiques de la classe principale dans le style procédural de l'obtention de la valeur. Mais, elle ne peut pas accéder aux membres de la classe interne statique.

La classe principale ne peut pas accéder aux membres des classes internes alors qu'elle crée l'objet des classes internes. Si la classe principale accède aux membres de la classe non statique, elle peut créer l'objet de la classe interne non statique.

Si la classe principale accède aux membres de la classe interne statique, il y a deux cas. Cas 1 : Pour les membres statiques, elle peut utiliser le nom de classe de la classe interne statique. Cas 2 : Pour les membres non statiques, elle peut créer une instance de la classe interne statique.

10voto

DigitalRoss Points 80400

En fait, tout ce que cela signifie, c'est qu'une déclaration de classe imbriquée qui est également statique peut être instanciée en dehors de la classe englobante.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X