Ответ
В 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 — нет.