Назад к вопросам
Middle
76
questionbank
Как из вложенного класса получить доступ к полю внешнего класса?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Из нестатического вложенного класса (inner class) доступ к полю внешнего класса осуществляется напрямую по имени поля.
Из статического вложенного класса (static nested class) доступ к полю внешнего класса возможен только через ссылку на объект внешнего класса, так как статический вложенный класс не имеет неявной связи с экземпляром внешнего класса.
// Внешний класс
class Outer {
private int outerField = 10;
// Нестатический вложенный класс
class Inner {
void accessOuterField() {
// Доступ к полю внешнего класса напрямую
System.out.println("From Inner class: " + outerField);
}
}
// Статический вложенный класс
static class StaticNested {
// Не имеет прямого доступа к outerField
void accessOuterField(Outer outerInstance) {
// Доступ через ссылку на объект внешнего класса
System.out.println("From StaticNested class: " + outerInstance.outerField);
}
}
public static void main(String[] args) {
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.accessOuterField(); // Вывод: From Inner class: 10
Outer.StaticNested staticNested = new Outer.StaticNested();
staticNested.accessOuterField(outer); // Вывод: From StaticNested class: 10
}
}
Для доступа к явному полю внешнего класса, если, например, у вложенного класса есть поле с таким же именем, можно использовать синтаксис Outer.this.fieldName.
class Outer {
private int field = 10;
class Inner {
private int field = 20;
void accessFields() {
// Доступ к полю вложенного класса
System.out.println("Inner field: " + field);
// Доступ к полю внешнего класса
System.out.println("Outer field: " + Outer.this.field);
}
}
public static void main(String[] args) {
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.accessFields();
// Вывод:
// Inner field: 20
// Outer field: 10
}
}