Можно ли использовать поля класса в расширении

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

Ответ

В Kotlin можно использовать поля класса в extension-функциях, но только если они объявлены как public или internal (в пределах модуля). Однако напрямую обращаться к приватным полям из расширений нельзя, так как расширения не имеют доступа к закрытым членам класса.

Пример:

class MyClass {
    val publicField = "Public"
    private val privateField = "Private" // Недоступен в extension
}

fun MyClass.printFields() {
    println(publicField) // OK
    // println(privateField) // Ошибка: Cannot access 'privateField'
}

Расширения работают как статические функции в Java и компилируются в обычные функции с параметром-приемником. Они не нарушают инкапсуляцию класса.