Mediumnested-classes

Что такое static nested, inner, anonymous, local классы?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Nested классы в Java бывают четырёх видов:

class Outer {
    // 1. Static nested — без ссылки на Outer instance
    static class StaticNested {}

    // 2. Inner (non-static) — имеет скрытую ссылку Outer.this
    class Inner {
        void m() { /* доступ к private членам Outer */ }
    }

    void method() {
        // 3. Anonymous — реализация интерфейса inline
        Runnable r = new Runnable() {
            public void run() { /* ... */ }
        };

        // 4. Local — внутри метода
        class Local { /* доступ к effectively final переменным */ }
        new Local();
    }
}
  • Inner создаётся: outer.new Inner(), static nested — new Outer.StaticNested();
  • Effective Java: предпочитать static nested, избегать inner (скрытая ссылка → memory leak);
  • Anonymous → заменить лямбдой, если это functional interface.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.