Maison > Java > javaDidacticiel > le corps du texte

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

Barbara Streisand
Libérer: 2024-10-31 11:43:02
original
800 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!