Sobes.tech
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