В чем разница между inner class и nested class в Kotlin

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

Ответ

В Kotlin:

  • Nested class (объявляется просто через class внутри другого класса) — это статический класс по умолчанию. Он не имеет доступа к членам внешнего класса.
class Outer {
    class Nested { // Не имеет доступа к Outer
        fun foo() = "Nested"
    }
}
  • Inner class (с модификатором inner) — нестатический, имеет доступ к полям внешнего класса через ссылку this@Outer.
class Outer {
    private val prop = "Outer prop"
    inner class Inner {
        fun foo() = prop // Доступ к полю внешнего класса
    }
}

Ключевое отличие: inner классы хранят ссылку на экземпляр внешнего класса, а nested — нет.