Зачем нужны inner классы

«Зачем нужны inner классы» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Внутренние классы (inner classes) в Kotlin/Java позволяют логически группировать классы, которые используются только в одном месте, улучшая инкапсуляцию и читаемость кода.

Типы внутренних классов:

  1. Обычный inner класс – имеет доступ к членам внешнего класса.
  2. Nested (static) класс – не имеет доступа к внешнему классу.
  3. Локальный класс – объявляется внутри метода.
  4. Анонимный класс – реализует интерфейс/наследует класс на лету.

Пример inner класса:

class Outer {
    private val outerField = "External"

    inner class Inner {
        fun printField() = println(outerField)  
    }
}

// Использование:
val outer = Outer()
val inner = outer.Inner()  
inner.printField() // "External"

Плюсы:

  • Лучшая организация кода.
  • Доступ к приватным полям внешнего класса (для non-static inner).
  • Сокрытие реализации (например, ViewHolder в RecyclerView).

Минусы:

  • Увеличивает связанность кода.
  • Может привести к утечкам памяти (если inner класс держит ссылку на внешний).