Назад к вопросам
Junior
125
questionbank
Что такое модификаторы видимости и как их использовать в Kotlin?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Модификаторы видимости в Kotlin определяют доступность объявлений (классов, интерфейсов, функций, свойств) для других частей программы.
Основные модификаторы видимости:
public: Видно везде. Является модификатором по умолчанию.internal: Видно только внутри одного модуля. Модулем считается набор Kotlin-файлов, компилируемых вместе.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()
// PRIVATE_CONSTANT // Ошибка: private на верхнем уровне видно только в файле объявления
}
| Модификатор | Доступность | Где использовать |
|---|---|---|
public |
Везде | По умолчанию, когда не указан другой модификатор |
internal |
Внутри модуля | Для API внутри библиотеки или модуля |
protected |
Внутри класса и его подклассов (для членов класса) | Для создания иерархии классов с наследованием |
private |
Внутри файла (для верхнего уровня); внутри класса (для членов) | Для сокрытия деталей реализации внутри файла или класса |