Доступ к внешней переменной класса во внутреннем классе
Во внутренних классах доступны переменные внешнего класса, но локальные переменные метода не являются. Я понял часть о том, что локальные переменные метода недоступны, но я хочу знать, почему доступны переменные внешнего класса?
Я понимаю, что, поскольку внутренний класс связывается с внешним классом, до тех пор, пока родитель доступен, ребенок может получить доступ к своим родительским переменным. Правильно ли я?
Ответы
Ответ 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
Тогда внутренний самый класс будет иметь доступ к переменным из внутреннего, а также внешнего.