Можно ли наследоваться от статического вложенного класса в Java?

«Можно ли наследоваться от статического вложенного класса в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, напрямую наследоваться от статического вложенного класса (static nested class) — можно, и это обычное наследование. Вопрос, вероятно, содержит неточную терминологию.

Ключевые моменты:

  1. Статический вложенный класс — это обычный класс, просто объявленный внутри другого класса для логической группировки. Он не является «статическим» в смысле запрета на наследование.

    class Outer {
        static class Nested { // Можно наследоваться
            int field;
        }
    }
    
    class Child extends Outer.Nested { // Это допустимо
        Child() {
            field = 10;
        }
    }
  2. Что невозможно в Java:

    • Объявить класс как abstract static или final static — модификаторы abstract/final и static для классов верхнего уровня несовместимы.
    • Наследоваться от утилитарного класса, который состоит только из статических методов (например, java.lang.Math), так как он объявлен как final.

Рекомендация: Для переиспользования кода, сгруппированного во вложенном классе, используйте обычное наследование или композицию.