Sobes.tech
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 Вътре в файла (за горно ниво); вътре в класа (за членове) За скриване на детайлите на реализацията вътре във файла или класа