Menu
Coddy logo textTech

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
420

Ein 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.0

Konstruktorparameter 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 180

Innerhalb 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:

Ada
challenge icon

Aufgabe

Einfach

Deklariere 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())
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Kotlin-Playground