Модификаторы видимости в 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.