Ответ 1
Вы сбиваете с толку static
с abstract
, как говорит kihero, или вы путаете концепцию с классом, который имеет методы static
(который является просто классом, который имеет статические методы).
Статический вложенный класс - это всего лишь вложенный класс, который не требует экземпляра его охватывающего класса. Если вы знакомы с С++, все классы на С++ являются "статическими" классами. В Java вложенные классы по умолчанию не статичны (этот нестатический сорт также называется "внутренним классом" ), что означает, что им нужен экземпляр их внешнего класса, который они отслеживают за кулисами в скрытом поле, но это позволяет внутренним классам ссылаться на поля связанного с ними класса.
public class Outer {
public class Inner { }
public static class StaticNested { }
public void method () {
// non-static methods can instantiate static and non-static nested classes
Inner i = new Inner(); // 'this' is the implied enclosing instance
StaticNested s = new StaticNested();
}
public static void staticMethod () {
Inner i = new Inner(); // <-- ERROR! there no enclosing instance, so cant do this
StaticNested s = new StaticNested(); // ok: no enclosing instance needed
// but we can create an Inner if we have an Outer:
Outer o = new Outer();
Inner oi = o.new Inner(); // ok: 'o' is the enclosing instance
}
}
Множество других примеров в Как создать экземпляр нестационарного внутреннего класса в статическом методе
Я фактически объявляю все вложенные классы статическими по умолчанию, если мне не нужен доступ к закрывающим полям классов.