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

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

Статический вложенный класс можно создавать с любым уровнем доступа: private, protected, public, пакетная видимость.

Статический вложенный класс может содержать как статические члены класса, так и экземплярные.


class Outer {
    public static class Nested {

        static int nestedStatic = 100;
        int nestedInstance = 200;
    }
}
Статические члены статического вложенного класса имеют доступ только к статическим членам внешнего класса.


class Outer {

    static int outerStatic = 10;
    int outerInstance = 20;

    public static class Nested {

        static int copyOuterStatic = outerStatic;
        int copyOuterInstance = outerInstance; // ошибка компиляции
    }
}
По сути, статический вложенный класс - это обычный класс, но чтобы создать его экземпляр извне, не нужно создавать экземпляр внешнего класса.


Outer.Nested obj = new Outer.Nested();
Чтобы получить доступ к экземплярным членам вложенного класса, необходимо создать его экземпляр, используя оператор new.


System.out.println(new Outer.Nested().nestedInstance);
Получить доступ к статическим членам можно без создания экземпляра вложенного класса.


class AnotherClass {

    public static void main(String args[]) {
        System.out.println(Outer.Nested.nestedStatic);
    }
}
Типы данных