Maison  >  Article  >  Java  >  Pourquoi ne pouvez-vous pas définir des méthodes statiques dans les classes internes non statiques (pré-Java 16) ?

Pourquoi ne pouvez-vous pas définir des méthodes statiques dans les classes internes non statiques (pré-Java 16) ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-31 11:43:02786parcourir

Why Can't You Define Static Methods in Non-Static Inner Classes (Pre-Java 16)?

Méthodes statiques dans les classes internes non statiques (pré-Java 16)

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn