Primärkonstruktoren
Teil des Abschnitts Objektorientierte Programmierung der Kotlin-Journey von Coddy. Lektion 3 von 57.
Die meisten Kotlin-Klassen erhalten ihre Anfangswerte in einem Hauptkonstruktor, der in Klammern nach dem Klassennamen geschrieben wird. val oder var vor einem Parameter macht ihn gleichzeitig zu einer Eigenschaft:
class Book(val title: String, var pages: Int)Innerhalb von main:
val book = Book("Dune", 412)
println(book.title)
book.pages += 8
println(book.pages)Ausgabe:
Dune
420Ein Parameter ohne val oder var ist nur verfügbar, während die Instanz erstellt wird, zum Beispiel um eine Eigenschaft zu berechnen. val-Eigenschaften können nach der Erstellung nicht neu zugewiesen werden; var-Eigenschaften schon:
class Temperature(celsius: Double) {
val fahrenheit = celsius * 9 / 5 + 32
}Innerhalb von main:
val t = Temperature(100.0)
println(t.fahrenheit)Ausgabe:
212.0Konstruktorparameter können Standardwerte haben und per Namen übergeben werden, sodass ein Konstruktor viele Möglichkeiten zum Erstellen einer Instanz abdeckt:
class Timer(val seconds: Int, val label: String = "timer")In main:
val egg = Timer(300, "egg")
val quick = Timer(30)
val named = Timer(label = "tea", seconds = 180)
println("${egg.label} ${egg.seconds}")
println("${quick.label} ${quick.seconds}")
println("${named.label} ${named.seconds}")Ausgabe:
egg 300
timer 30
tea 180Innerhalb des Klassenkörpers verweist this auf die aktuelle Instanz. Es wird benötigt, wenn ein Methodenparameter denselben Namen wie eine Eigenschaft hat:
class Player(var name: String) {
fun rename(name: String) {
this.name = name
}
}Innerhalb von main:
val p = Player("anon")
p.rename("Ada")
println(p.name)Ausgabe:
AdaAufgabe
EinfachDeklariere die Klasse Account mit einem primären Konstruktor: einem schreibgeschützten owner und einem änderbaren balance, dessen Standardwert 0 ist. Füge summary() hinzu, das Ada has 150 zurückgibt.
Der bereitgestellte Code liest einen Besitzer ein und, wenn eine zweite Zeile vorhanden ist, einen Anfangssaldo. Er erstellt das Konto mit oder ohne den Saldo und gibt summary() aus.
Dein Code gehört in Account.kt. Main.kt enthält den bereitgestellten Eingabe-/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 account = if (input.size > 1) Account(input[0], input[1].toInt()) else Account(input[0])
println(account.summary())
}
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