Доступ к внешней переменной класса во внутреннем классе

Во внутренних классах доступны переменные внешнего класса, но локальные переменные метода не являются. Я понял часть о том, что локальные переменные метода недоступны, но я хочу знать, почему доступны переменные внешнего класса?

Я понимаю, что, поскольку внутренний класс связывается с внешним классом, до тех пор, пока родитель доступен, ребенок может получить доступ к своим родительским переменным. Правильно ли я?

Ответ 1

Предполагая, что ваш внешний класс называется Outer, из области внутреннего класса (нестатического), Outer.this.foo, чтобы получить в поле.

Например,

Outer.this.foo=new ArrayList<>();

где Outer - это имя класса, а foo - поле.

Вы также можете взять его непосредственно как foo=new Baz(), но он выберет внутреннее поле, если возникнет конфликт имен из-за затенения.

если это статический внутренний класс, вам нужен явный экземпляр:

outerInstance.foo=new ArrayList<>();

или если поле для доступа является статическим, обратитесь к нему, как обычно, с помощью

Outer.staticFoo=new ArrayList<>();

Ответ 2

Ответ: Внешние переменные класса в java доступны из-за лексической области.

Что такое лексическая область?

Область, определенная в порядке написания кода. Допустим, ваша структура класса выглядит следующим образом

OuterMost  
   --Inner  
     --InnerMost

Тогда внутренний самый класс будет иметь доступ к переменным из внутреннего, а также внешнего.