Sobes.tech
Junior

Was sind Sichtbarkeitsmodifikatoren und wie verwendet man sie in Kotlin?

sobes.tech KI

Antwort von AI

Sichtbarkeitsmodifikatoren in Kotlin bestimmen die Zugänglichkeit von Deklarationen (Klassen, Schnittstellen, Funktionen, Eigenschaften) für andere Teile des Programms.

Die wichtigsten Sichtbarkeitsmodifikatoren:

  • public: Überall sichtbar. Ist der Standardmodifikator.
  • internal: Nur innerhalb eines Moduls sichtbar. Ein Modul ist eine Gruppe von Kotlin-Dateien, die zusammen kompiliert werden.
  • protected: Innerhalb der Klasse und ihrer Unterklassen sichtbar (einschließlich Mitglieder, die in abgeleiteten Klassen definiert sind). Außerhalb des Pakets nicht sichtbar.
  • private: Nur innerhalb der Datei sichtbar, in der es deklariert ist. Für Klassenmitglieder nur innerhalb dieser Klasse sichtbar (und ihres companion objects, verschachtelten und inneren Klassen).

Anwendung der Modifikatoren:

  • An Klassen, Schnittstellen, Objekte und deren Konstruktoren.
  • An Funktionen, Eigenschaften und deren Getter/Setter auf oberster Ebene (außerhalb von Klassen).
  • An Mitglieder der Klasse (verschachtelte Klassen, innere Klassen, Funktionen, Eigenschaften).

Beispiel:

// Datei: example.kt

private const val PRIVATE_CONSTANT = 1 // Nur in dieser Datei sichtbar

internal fun internalFunction() { // Nur innerhalb des Moduls sichtbar
    println("Interne Funktion aufgerufen")
}

open class BaseClass {
    protected val protectedProperty = "Protected" // Sichtbar in dieser Klasse und ihren Unterklassen

    fun publicMethod() { // Überall sichtbar (public standardmäßig)
        println("Öffentliche Methode aufgerufen")
    }

    private fun privateMethod() { // Nur innerhalb von BaseClass sichtbar
        println("Private Methode aufgerufen")
    }
}

class DerivedClass : BaseClass() {
    fun accessProtected() {
        println("Zugriff auf geschützte Eigenschaft: $protectedProperty") // Zugriff auf protected
        // privateMethod() // Fehler: private ist in der Unterklasse nicht sichtbar
    }
}

fun main() {
    val base = BaseClass()
    base.publicMethod()
    // base.protectedProperty // Fehler: protected ist außerhalb der Klasse und ihrer Unterklassen nicht sichtbar

    val derived = DerivedClass()
    derived.accessProtected()

    internalFunction()
    // PRIVATE_CONSTANT // Fehler: private auf oberster Ebene ist nur in der Deklarationsdatei sichtbar
}
Modifikator Zugänglichkeit Wo verwenden
public Überall Standard, wenn kein anderer Modifikator angegeben wird
internal Innerhalb des Moduls Für API innerhalb einer Bibliothek oder eines Moduls
protected Innerhalb der Klasse und ihrer Unterklassen (für Mitglieder) Für die Erstellung von Klassenhierarchien mit Vererbung
private Innerhalb der Datei (auf oberster Ebene); innerhalb der Klasse (für Mitglieder) Zum Verbergen von Implementierungsdetails innerhalb der Datei oder Klasse