Sobes.tech
Junior

Mi a láthatósági módosítók és hogyan használjuk őket Kotlinben?

sobes.tech MI

Válasz az MI-től

A Kotlinban a láthatósági módosítók meghatározzák a program többi részéhez való hozzáférést (osztályok, interfészek, funkciók, tulajdonságok).

Fő láthatósági módosítók:

  • public: Mindenhol látható. Alapértelmezett módosító.
  • internal: Csak egy modulon belül látható. Egy modulnak tekinthető egy Kotlin-fájlok halmaza, amelyeket együtt fordítanak.
  • protected: Látható az osztályon belül és annak leszármazottainál (beleértve a leszármazott osztályokban meghatározott tagokat is). Nem látható a csomagon kívül.
  • private: Csak az adott fájlon belül látható, ahol deklarálták. Osztálytagok esetén csak az osztályon belül látható (beleértve a társosztályokat, beágyazott és belső osztályokat).

A módosítók alkalmazása:

  • Osztályokon, interfészeken, objektumokon és azok konstruktorain.
  • Függvényeken, tulajdonságokon és azok getterjein/setterjein a felső szinten (az osztályokon kívül).
  • Osztálytagokon (beágyazott osztályok, belső osztályok, függvények, tulajdonságok).

Példa:

// Fájl: example.kt

private const val PRIVATE_CONSTANT = 1 // Csak ebben a fájlban látható

internal fun internalFunction() { // Csak a modulon belül látható
    println("Belső függvény hívva")
}

open class BaseClass {
    protected val protectedProperty = "Védett" // Látható ebben az osztályban és leszármazottaiban

    fun publicMethod() { // Mindenhol látható (alapértelmezett public)
        println("Nyilvános metódus hívva")
    }

    private fun privateMethod() { // Csak a BaseClass belül látható
        println("Privát metódus hívva")
    }
}

class DerivedClass : BaseClass() {
    fun accessProtected() {
        println("Hozzáférés védett tulajdonsághoz: $protectedProperty") // Hozzáférés védetthez
        // privateMethod() // Hibás: a private nem látható a leszármazottban
    }
}

fun main() {
    val base = BaseClass()
    base.publicMethod()
    // base.protectedProperty // Hibás: a védett nem látható kívül az osztályon és leszármazottain

    val derived = DerivedClass()
    derived.accessProtected()

    internalFunction()
    // PRIVATE_CONSTANT // Hibás: a private a felső szinten csak a deklarációs fájlban látható
}
Módosító Hozzáférhetőség Hol használjuk
public Mindenhol Alapértelmezett, ha más módosítót nem adunk meg
internal Egy modulon belül API-ként a könyvtár vagy modul belsejében
protected Osztályon belül és leszármazottaknál (osztálytagok esetén) Osztályhierarchiák létrehozásához és örökléshez
private Fájlon belül (felső szinten); osztályon belül (tagok esetén) A részletek elrejtéséhez a fájl vagy osztály belsejében