Ответ
В Kotlin при объявлении класса внутри другого класса автоматически создается вложенный класс (nested class), который не имеет доступа к членам внешнего класса. Чтобы получить доступ к внешнему классу, нужно явно указать inner:
class Outer {
private val outerField = 1
// Nested class (по умолчанию)
class Nested {
fun foo() {
// outerField - недоступен
}
}
// Inner class (явное указание)
inner class Inner {
fun foo() {
println(outerField) // доступ есть
}
}
}
В Java по умолчанию создается inner-класс (нестатический), который имеет доступ к членам внешнего класса. Для создания nested класса нужно указать static.