Maison >Java >javaDidacticiel >Pourquoi les classes internes Java ne peuvent-elles pas avoir de champs statiques ?
Pourquoi Java interdit les champs statiques dans les classes internes
Java interdit les champs et méthodes statiques dans les classes internes car ces classes internes sont considérées comme des "instances" classes internes, ce qui signifie qu'elles sont intrinsèquement liées à une instance de la classe englobante.
Compréhension Classes internes d'instance
Les classes internes d'instance sont similaires aux attributs d'instance d'une classe englobante. Ils sont créés lorsqu'une instance de la classe englobante est créée et dépendent de cette instance pour leur existence. Par conséquent, cela n'a pas de sens d'autoriser des fonctionnalités statiques au sein de ces classes internes.
Attributs statiques et dépendances
Les éléments statiques, tels que les champs et les méthodes statiques, sont conçus pour être indépendant de toute instance d’objet spécifique. Si un champ statique devait être défini dans une classe interne d'instance, il introduirait une dépendance sur l'instance englobante, ce qui contredit le but des attributs statiques.
Exemple : attribut de compteur
Prenons un exemple où l'objectif est de compter le nombre d'objets InnerClass créés. Si nous devions définir un champ de compteur statique dans InnerClass comme indiqué ci-dessous :
class OuterClass { class InnerClass { static int count; // Compile error } }
Cela prêterait à confusion car il n'est pas clair à quel nombre d'instances ce champ fait référence. Lorsque plusieurs instances d'OuterClass sont créées, chacune avec sa propre InnerClass, il y aurait une ambiguïté dans la détermination du nombre global.
Classes internes statiques
Java autorise les classes internes statiques , ou classes internes « imbriquées », qui sont déclarées comme suit :
class OuterClass { static class InnerClass { static int count = 0; // Valid static field } }
Les classes internes statiques sont indépendantes de l'objet englobant et peuvent avoir des champs et des méthodes statiques. Cependant, ils sont toujours étroitement liés à la classe englobante et ne peuvent accéder qu'aux membres statiques de la classe englobante.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!