Inner Class

https://kotlinlang.org/docs/nested-classes.html
inner

Используется для обозначения вложенного класса, который имеет доступ к полям и методам внешнего класса. Без inner вложенные классы в Kotlin являются статическими.

class Outer {
    private val name = "Outer"

    inner class Inner {
        fun printName() {
            println("Accessing: $name")
        }
    }
}

fun main() {
    val outer = Outer()
    val inner = outer.Inner()
    inner.printName() // Accessing: Outer
}
Вопросы на собесе (5)
  1. Для чего используется inner class?

    Позволяет классу получить доступ к свойствам и методам внешнего класса, что удобно для работы с связанными данными и логикой.

  1. Разница между inner class и обычным nested классом?

    inner class имеет доступ к полям и методам внешнего класса, обычный класс этого не может. Кроме того, inner class создается внутри внешнего класса и связан с его экземпляром, а обычный класс может существовать независимо.

  1. Почему inner-class имеет доступ к полям родительского класса?

    Потому что он неявно содержит ссылку на его экземпляр. Это позволяет внутреннему классу обращаться к переменным и методам внешнего класса, как если бы они были его собственными.

  1. Имеет ли inner-class доступ к приватным полям родительского класса?

    Да, через неявную ссылку на его экземпляр.

  1. Имеет ли родительский класс доступ к приватным полям inner-класса?

    Нет.