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 подскажет развёрнутый ответ в реальном времени.