Ответ
В 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– для логической группировки без зависимости от внешнего класса