Dans les classes internes, les variables de la classe externe sont accessibles, mais les variables locales d'une méthode ne le sont pas. J'ai compris la partie sur les variables locales d'une méthode non accessible mais je veux savoir pourquoi les variables de classe externe sont accessibles?
D'après ce que je comprends, lorsqu'une classe interne se lie à la classe externe, l'enfant peut accéder à ses variables parent tant que le parent est disponible. Ai-je raison?
En supposant que votre classe externe s'appelle Outer
, de la portée de la classe interne (non statique), Outer.this.foo
pour accéder au champ.
Par exemple,
Outer.this.foo=new ArrayList<>();
où Outer est le nom de la classe et foo
identifie le champ.
Vous pouvez également le saisir directement sous la forme foo=new Baz()
, mais il choisira le champ intérieur en cas de conflit de nom dû à un ombrage.
s'il s'agit d'une classe interne statique, vous avez besoin d'une instance explicite:
outerInstance.foo=new ArrayList<>();
ou si le champ à accéder est statique, y accéder comme d'habitude avec:
Outer.staticFoo=new ArrayList<>();
Réponse: Les variables de classe externes en Java sont accessibles en raison de la portée lexicale.
Qu'est-ce qu'un champ lexical?
La portée définie dans l'ordre dans lequel le code est créé. Disons que votre structure de classe est la suivante
OuterMost
--Inner
--InnerMost
Ensuite, la classe la plus interne pourra accéder aux variables de la plus interne à la plus externe.