Какие классы создаются по умолчанию внутри других классов если не указать ключевого слова

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

Ответ

В 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.