Quelle est la différence entre une classe interne statique et non statique ?
- Classe interne Java et classe statique imbriquée (5 réponses )
Réponses
Trop de publicités?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.
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.
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.