Sobes.tech
Назад к вопросам
Junior — Middle
100

Каково отличие между вложенным классом, объявленным как статический, и внутренним классом без статуса в Java?

Ответ от нейросети

sobes.tech AI

В Java различают два типа вложенных классов: статические вложенные классы (static nested classes) и внутренние классы (inner classes), которые не объявлены как static.

  • Статический вложенный класс:

    • Объявляется с модификатором static внутри внешнего класса.
    • Не имеет доступа к нестатическим полям и методам внешнего класса напрямую.
    • Экземпляр статического вложенного класса не связан с экземпляром внешнего класса.
    • Используется как обычный класс, но логически сгруппирован с внешним.
  • Внутренний класс (non-static):

    • Не объявлен как static.
    • Имеет доступ к всем полям и методам внешнего класса, включая приватные.
    • Экземпляр внутреннего класса связан с экземпляром внешнего класса.
    • Для создания требуется объект внешнего класса.

Пример:

public class Outer {
    private int outerField = 10;

    static class StaticNested {
        void print() {
            // Нельзя обратиться к outerField напрямую
            System.out.println("Static nested class");
        }
    }

    class Inner {
        void print() {
            // Доступ к outerField
            System.out.println("Inner class, outerField = " + outerField);
        }
    }
}

// Использование:
Outer.StaticNested staticNested = new Outer.StaticNested();
staticNested.print();

Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.print();

Таким образом, основное отличие — связь с экземпляром внешнего класса и доступ к его нестатическим членам.