
Статический вложенный класс может содержать как статические члены класса, так и экземплярные.
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);
}
}