Sobes.tech
Junior

Čo sú modifikátory viditeľnosti a ako ich používať v Kotlin?

sobes.tech AI

Odpoveď od AI

Modifikátory viditeľnosti v Kotlin určujú dostupnosť deklarácií (tried, rozhraní, funkcií, vlastností) pre ostatné časti programu.

Hlavné modifikátory viditeľnosti:

  • public: Viditeľný všade. Predvolený modifikátor.
  • internal: Viditeľný iba v rámci jedného modulu. Modul je súbor Kotlinových súborov kompilovaných dohromady.
  • protected: Viditeľný v rámci triedy a jej podtried (vrátane členov definovaných v dedičných triedach). Nie je viditeľný mimo balíka.
  • private: Viditeľný iba v rámci súboru, v ktorom je deklarovaný. U členov triedy je viditeľný iba v rámci tejto triedy (vrátane jej companion object, vnorených a vnútorných tried).

Použitie modifikátorov:

  • Pre triedy, rozhrania, objekty a ich konštruktory.
  • Pre funkcie, vlastnosti a ich getterov/setterov na najvyššej úrovni (mimo tried).
  • Pre členov triedy (vnorené triedy, vnútorné triedy, funkcie, vlastnosti).

Príklad:

// Súbor: example.kt

private const val PRIVATE_CONSTANT = 1 // Viditeľný iba v tomto súbore

internal fun internalFunction() { // Viditeľný iba v rámci modulu
    println("Interná funkcia")
}

open class BaseClass {
    protected val protectedProperty = "Chránené" // Viditeľné v tejto triede a jej podtriedach

    fun publicMethod() { // Viditeľné všade (predvolené public)
        println("Verejná funkcia")
    }

    private fun privateMethod() { // Viditeľné iba v rámci BaseClass
        println("Súkromná funkcia")
    }
}

class DerivedClass : BaseClass() {
    fun accessProtected() {
        println("Prístup k chránenému vlastnosti: $protectedProperty") // Prístup k protected
        // privateMethod() // Chyba: private nie je viditeľné v podtriede
    }
}

fun main() {
    val base = BaseClass()
    base.publicMethod()
    // base.protectedProperty // Chyba: protected nie je viditeľné mimo triedy a jej podtried

    val derived = DerivedClass()
    derived.accessProtected()

    internalFunction()
    // PRIVATE_CONSTANT // Chyba: private na najvyššej úrovni je viditeľná iba v deklarovanom súbore
}
Modifikátor Dostupnosť Kde použiť
public Všade Predvolené, keď nie je uvedený iný modifikátor
internal Uvnitř modulu Pre API v rámci knižnice alebo modulu
protected Uvnitř triedy a jejích podtried (pre členov triedy) Pre vytváranie hierarchií tried s dedičstvom
private Uvnitř súboru (pre najvyššiu úroveň); uvnitř triedy (pre členov) Pre skrytie detailov implementácie v rámci súboru alebo triedy