Что такое модификаторы видимости и как их использовать в Kotlin?

Модификаторы видимости в Kotlin определяют доступность объявлений (классов, интерфейсов, функций, свойств) для других частей программы.

Короткий ответ

Что ответить на собеседовании

Модификаторы видимости в Kotlin определяют доступность объявлений (классов, интерфейсов, функций, свойств) для других частей программы.

Подробный разбор

Ответ с пояснениями

Модификаторы видимости в Kotlin определяют доступность объявлений (классов, интерфейсов, функций, свойств) для других частей программы.

Основные модификаторы видимости:

  • public: Видно везде. Является модификатором по умолчанию.
  • internal: Видно только внутри одного модуля. Модулем считается набор Kotlin-файлов, компилируемых вместе.
  • protected: Видно внутри класса и его подклассов. Границы пакета не определяют эту видимость; на верхнем уровне protected недоступен.
  • private: Видно только внутри файла, в котором объявлено. Для членов класса видно только внутри этого класса (и его companion object, вложенных и внутренних классов).

Применение модификаторов:

  • У классов, интерфейсов, объектов и их конструкторов.
  • У функций и свойств верхнего уровня; геттер имеет видимость свойства, а сеттер может быть более ограниченным.
  • У членов класса (вложенных классов, внутренних классов, функций, свойств).

Пример:

// Файл: example.kt

private const val PRIVATE_CONSTANT = 1 // Видно только в этом файле

internal fun internalFunction() { // Видно только внутри модуля
    println("Internal function called")
}

open class BaseClass {
    protected val protectedProperty = "Protected" // Видно в этом классе и его подклассах

    fun publicMethod() { // Видно везде (public по умолчанию)
        println("Public method called")
    }

    private fun privateMethod() { // Видно только внутри BaseClass
        println("Private method called")
    }
}

class DerivedClass : BaseClass() {
    fun accessProtected() {
        println("Accessing protected property: $protectedProperty") // Доступ к protected
        // privateMethod() // Ошибка: private не видно в подклассе
    }
}

fun main() {
    val base = BaseClass()
    base.publicMethod()
    // base.protectedProperty // Ошибка: protected не видно вне класса и подклассов

    val derived = DerivedClass()
    derived.accessProtected()

    internalFunction()
    println(PRIVATE_CONSTANT) // Разрешено: main находится в том же example.kt
}
Модификатор Доступность Где использовать
public Везде По умолчанию, когда не указан другой модификатор
internal Внутри модуля Для API внутри библиотеки или модуля
protected Внутри класса и его подклассов (для членов класса) Для создания иерархии классов с наследованием
private Внутри файла (для верхнего уровня); внутри класса (для членов) Для сокрытия деталей реализации внутри файла или класса

Видимость объявления также ограничена доступностью содержащего его типа. Модификаторы видимости Kotlin.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку