Sichtbarkeitsmodifikatoren
Teil des Abschnitts Objektorientierte Programmierung der Kotlin-Journey von Coddy. Lektion 8 von 57.
Kapselung bedeutet, dass eine Klasse kontrolliert, wie auf ihre Daten zugegriffen wird. Sichtbarkeitsmodifikatoren legen fest, wer ein Mitglied sehen kann. private verbirgt es vor allem außerhalb der Klasse, sodass die eigenen Methoden der Klasse der einzige Zugangsweg sind:
class Account {
private var balance = 0
fun deposit(amount: Int) {
if (amount > 0) balance += amount
}
fun report() = "balance: $balance"
}Innerhalb von main:
val a = Account()
a.deposit(50)
a.deposit(-999)
println(a.report())
// a.balance = 1_000_000 // Fehler: kein Zugriff auf 'balance': es ist privateAusgabe:
balance: 50Kotlin hat vier Modifikatoren. Ohne einen davon ist eine Deklaration public und überall sichtbar:
public // Standard: überall sichtbar
internal // sichtbar im selben Modul (App oder Bibliothek)
protected // sichtbar in der Klasse und ihren Unterklassen
private // sichtbar innerhalb der Klasse (oder Datei, für Top-Level-Deklarationen)Private Hilfsfunktionen halten die öffentliche Oberfläche klein. Aufrufer sehen, was die Klasse tut, nicht wie:
class Password(private val text: String) {
val isStrong: Boolean
get() = hasDigit() && text.length >= 8
private fun hasDigit() = text.any { it.isDigit() }
}Innerhalb von main:
println(Password("secret123").isStrong)
println(Password("short1").isStrong)Ausgabe:
true
falseKonstruktor-Eigenschaften können ebenfalls Modifizierer haben: private val speichert einen Wert, den Code außerhalb der Klasse nicht lesen kann. Das Verbergen von Daten ermöglicht es einer Klasse, jede Änderung zu überprüfen und ihre Regeln einzuhalten:
class Locker(private val code: String) {
private val items = mutableListOf<String>()
fun store(item: String, code: String): Boolean {
if (code != this.code) return false
items.add(item)
return true
}
}Aufgabe
EinfachVervollständige die Klasse Locker(private val code: String). Ihre Liste items ist privat. store(item, code) fügt das Element nur hinzu, wenn der Code übereinstimmt, und gibt zurück, ob dies der Fall war; open(code) gibt die durch , verbundenen Elemente (oder empty) zurück, wenn der Code übereinstimmt, und andernfalls wrong code.
Der bereitgestellte Code liest den Code des Schließfachs und anschließend Befehle der Form put <code> <item> oder open <code> ein. Für jedes put gibt er stored oder denied und für jedes open das Ergebnis aus.
Dein Code gehört in Locker.kt. Main.kt enthält den bereitgestellten Ein-/Ausgabecode und kann nicht bearbeitet werden.
Probier es selbst
fun main() {
// Gelieferter Ein-/Ausgabecode: belasse ihn wie er ist
val input = generateSequence(::readLine).toList()
val locker = Locker(input[0])
for (cmd in input.drop(1)) {
val p = cmd.split(" ")
if (p[0] == "put") println(if (locker.store(p[2], p[1])) "stored" else "denied")
else println(locker.open(p[1]))
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Klassen und Objekte
Arbeiten mit DateienKlassen definierenPrimärkonstruktoreninit-Blöcke und ValidierungSekundärkonstruktorenRückblick – Bibliotheksausweis4Vererbung
Offene Klassen und UnterklassenÜberschreiben von Membernsuper und KonstruktorenAbstrakte KlassenRückblick – Mitarbeiterverzeichnis2Eigenschaften und Kapselung
Benutzerdefinierte ZugriffsmethodenSichtbarkeitsmodifikatorenPrivate Setterlazy und lateinitWiederholung – Bankkonto5Schnittstellen
Schnittstellen deklarierenStandardmethodenMehrere SchnittstellenSchnittstellen als TypenRückblick – Zahlungsmethoden8Generics
Generische FunktionenGenerische KlassenTypbeschränkungenVarianz mit in und outRückblick – Prioritätswarteschlange11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Kotlin-Playground