Sobes.tech
Back to questions
Junior — Middle
73

Какие отличия существуют между нестационарными и статическими внутренними классами в языке программирования?

Answer from AI

sobes.tech AI

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

  • Нестационарные внутренние классы:

    • Не имеют модификатора static.
    • Могут обращаться к полям и методам внешнего класса, включая приватные.
    • Для создания экземпляра требуется объект внешнего класса.
    • Используются, когда внутренний класс логически связан с конкретным экземпляром внешнего.
  • Статические вложенные классы:

    • Объявлены с модификатором static.
    • Не имеют ссылки на экземпляр внешнего класса.
    • Не могут обращаться к нестатическим полям и методам внешнего класса напрямую.
    • Создаются без необходимости иметь объект внешнего класса.

Пример:

class Outer {
    private int outerField = 10;

    class Inner {
        void print() {
            System.out.println("Outer field: " + outerField); // доступ к нестатическому полю
        }
    }

    static class StaticNested {
        void print() {
            // System.out.println(outerField); // Ошибка, нет доступа к нестатическому полю
            System.out.println("Static nested class");
        }
    }
}

// Создание экземпляров
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
Outer.StaticNested staticNested = new Outer.StaticNested();