Junior
Wat zijn zichtbaarheidsmutators en hoe gebruik je ze in Kotlin?
sobes.tech AI
Antwoord van AI
Visibility-modifiers in Kotlin bepalen de toegankelijkheid van declaraties (klassen, interfaces, functies, eigenschappen) voor andere delen van het programma.
De belangrijkste visibility-modifiers:
public: Overal zichtbaar. Is de standaardmodifier.internal: Alleen binnen een module zichtbaar. Een module wordt beschouwd als een verzameling Kotlin-bestanden die samen worden gecompileerd.protected: Zichtbaar binnen de klasse en haar subklassen (inclusief leden gedefinieerd in afgeleide klassen). Niet zichtbaar buiten het pakket.private: Alleen zichtbaar binnen het bestand waarin het is gedeclareerd. Voor klasseleden, alleen binnen die klasse (en haar companion object, geneste en interne klassen).
Toepassing van modifiers:
- Op klassen, interfaces, objecten en hun constructors.
- Op functies, eigenschappen en hun getters/setters op het hoogste niveau (buiten klassen).
- Op klasseleden (geneste klassen, interne klassen, functies, eigenschappen).
Voorbeeld:
// Bestand: example.kt
private const val PRIVATE_CONSTANT = 1 // Alleen zichtbaar in dit bestand
internal fun internalFunction() { // Alleen zichtbaar binnen de module
println("Interne functie aangeroepen")
}
open class BaseClass {
protected val protectedProperty = "Protected" // Zichtbaar in deze klasse en haar subklassen
fun publicMethod() { // Overal zichtbaar (standaard public)
println("Publieke methode aangeroepen")
}
private fun privateMethod() { // Alleen zichtbaar binnen BaseClass
println("Privé methode aangeroepen")
}
}
class DerivedClass : BaseClass() {
fun accessProtected() {
println("Toegang tot protected eigenschap: $protectedProperty") // Toegang tot protected
// privateMethod() // Fout: private niet zichtbaar in subklasse
}
}
fun main() {
val base = BaseClass()
base.publicMethod()
// base.protectedProperty // Fout: protected niet zichtbaar buiten klasse en subklassen
val derived = DerivedClass()
derived.accessProtected()
internalFunction()
// PRIVATE_CONSTANT // Fout: private op hoog niveau zichtbaar alleen in het declaratiebestand
}
| Modificator | Toegankelijkheid | Waar gebruiken |
|---|---|---|
public |
Overal | Standaard, wanneer geen andere modifier wordt gespecificeerd |
internal |
Binnen de module | Voor API binnen bibliotheek of module |
protected |
Binnen de klasse en haar subklassen (voor leden) | Voor het creëren van klassehiërarchieën met overerving |
private |
Binnen het bestand (hoog niveau); binnen de klasse (voor leden) | Om implementatiedetails te verbergen binnen bestand of klasse |