Dans les versions pré-Java 16, tenter de définir une méthode statique dans une méthode non statique la classe interne entraîne une erreur du compilateur. Cette limitation découle de la relation inhérente entre les classes internes et leurs classes englobantes.
Raison :
Une instance d'une classe interne non statique est implicitement associée à une instance de sa classe englobante. Cela signifie que chaque méthode de la classe interne a accès aux variables d'instance et aux méthodes de la classe englobante. Cependant, les méthodes statiques n’appartiennent à aucune instance particulière mais plutôt à la classe elle-même. Par conséquent, ils ne peuvent pas accéder directement aux données ou aux méthodes liées à l'instance.
Exemple :
Considérez le code suivant :
<code class="java">public class Foo { class Bar { static void method() {} // Compiler error } }</code>
Le compilateur émet une erreur car la méthode method() est déclarée comme statique dans la classe interne non statique Bar. Puisque la classe Bar n'est pas statique, ses instances sont associées aux instances de Foo. Par conséquent, la méthode method() ne peut pas exister indépendamment d'une instance Foo.
Classes internes statiques :
En revanche, déclarer la classe interne comme statique permet de créer des classes internes statiques. méthodes qu'elle contient.
<code class="java">public class Foo { static class Bar { // now static static void method() {} } }</code>
Une classe interne statique, en revanche, n'a pas d'association directe avec les instances de sa classe englobante. Cela signifie que ses méthodes ne peuvent pas accéder aux données ou méthodes spécifiques à l'instance. Cependant, ils peuvent toujours accéder aux membres statiques de la classe englobante.
Java 16 :
Dans Java 16 et versions ultérieures, les classes internes statiques et non statiques peuvent définir méthodes statiques. Cela est dû à l'introduction du nouveau modificateur pour les méthodes statiques, qui leur permet d'exister indépendamment de toute instance d'objet.
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!