Зачем деление на inner и nested классы

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

Ответ

В Kotlin/Java inner и nested классы различаются доступом к внешнему классу:

Nested (static в Java)

  • Не имеет доступа к членам внешнего класса
  • Объявляется без inner
class Outer {
    class Nested { // аналог static class в Java
        fun foo() = "Can't access Outer members"
    }
}

Inner класс

  • Имеет доступ к полям внешнего класса через this@Outer
  • Хранит ссылку на внешний класс (накладные расходы)
class Outer {
    private val prop = 42
    inner class Inner {
        fun foo() = "Access Outer prop: ${this@Outer.prop}"
    }
}

Когда использовать:

  • inner – когда нужен доступ к внешнему состоянию
  • nested – для логической группировки без зависимости от внешнего класса