Junior
Какви са модификаторите за видимост и как да ги използваме в Kotlin?
sobes.tech AI
Отговор от AI
Модификаторите за видимост в Kotlin определят достъпността на декларации (класове, интерфейси, функции, свойства) за други части на програмата.
Основните модификатори за видимост:
public: Видим навсякъде. По подразбиране.internal: Видим само вътре в един модул. Модулът се счита за набор от Kotlin файлове, компилирани заедно.protected: Видим вътре в класа и неговите подкласове (включително членове, дефинирани в наследени класове). Не е видим извън пакета.private: Видим само вътре в файла, в който е обявен. За членове на клас е видим само вътре в този клас (и неговия companion object, вложени и вътрешни класове).
Използване на модификаторите:
- За класове, интерфейси, обекти и техните конструктори.
- За функции, свойства и техните гетъри/сетъри на горно ниво (извън класове).
- За членове на класа (вложени класове, вътрешни класове, функции, свойства).
Пример:
// Файл: example.kt
private const val PRIVATE_CONSTANT = 1 // Видима само в този файл
internal fun internalFunction() { // Видима само вътре в модула
println("Вътрешна функция")
}
open class BaseClass {
protected val protectedProperty = "Защитена" // Видима в този клас и неговите подкласове
fun publicMethod() { // Видима навсякъде (по подразбиране public)
println("Общ метод")
}
private fun privateMethod() { // Видима само вътре в BaseClass
println("Частен метод")
}
}
class DerivedClass : BaseClass() {
fun accessProtected() {
println("Достъп до защитена собственост: $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 |
Вътре в файла (за горно ниво); вътре в класа (за членове) | За скриване на детайлите на реализацията вътре във файла или класа |