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 |