Konstruktory główne
Część sekcji Programowanie obiektowe ścieżki Kotlin w Coddy. Lekcja 3 z 57.
Większość klas Kotlin przyjmuje wartości początkowe w konstruktorze podstawowym, zapisywanym w nawiasach po nazwie klasy. val lub var przed parametrem sprawia, że jest on jednocześnie właściwością:
class Book(val title: String, var pages: Int)Wewnątrz main:
val book = Book("Dune", 412)
println(book.title)
book.pages += 8
println(book.pages)Wynik:
Dune
420Parametr bez val lub var jest dostępny tylko podczas tworzenia instancji, na przykład do obliczenia właściwości. Właściwości val nie można ponownie przypisać po utworzeniu; właściwości var można:
class Temperature(celsius: Double) {
val fahrenheit = celsius * 9 / 5 + 32
}Wewnątrz main:
val t = Temperature(100.0)
println(t.fahrenheit)Wynik:
212.0Parametry konstruktora mogą mieć wartości domyślne i mogą być przekazywane przez nazwę, dzięki czemu jeden konstruktor obejmuje wiele sposobów tworzenia instancji:
class Timer(val seconds: Int, val label: String = "timer")Wewnątrz 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}")Wynik:
egg 300
timer 30
tea 180W treści klasy this odnosi się do bieżącej instancji. Jest potrzebne, gdy parametr metody ma taką samą nazwę jak właściwość:
class Player(var name: String) {
fun rename(name: String) {
this.name = name
}
}Wewnątrz main:
val p = Player("anon")
p.rename("Ada")
println(p.name)Wynik:
AdaWyzwanie
ŁatwyZadeklaruj klasę Account z konstruktorem podstawowym: tylko do odczytu owner i zmiennym balance, którego domyślną wartością jest 0. Dodaj summary(), która zwraca Ada has 150.
Dostarczony kod odczytuje właściciela, a jeśli dostępny jest drugi wiersz, także saldo początkowe. Tworzy konto z saldem lub bez niego i wypisuje summary().
Twój kod umieść w pliku Account.kt. Plik Main.kt zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
fun main() {
// Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
val input = generateSequence(::readLine).toList()
val account = if (input.size > 1) Account(input[0], input[1].toInt()) else Account(input[0])
println(account.summary())
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Klasy i obiekty
Praca z plikamiDefiniowanie klasKonstruktory główneBloki init i walidacjaKonstruktory dodatkowePodsumowanie — karta biblioteczna4Dziedziczenie
Klasy otwarte i podklasyNadpisywanie składowychsuper i konstruktoryKlasy abstrakcyjnePodsumowanie – katalog pracowników7Klasy specjalne
Klasy danychKlasy wyliczenioweHierarchie zapieczętowaneequals, hashCode, toStringPodsumowanie — śledzenie zamówień10Wzorce projektowe, część 2
Delegowanie za pomocą byWzorzec dekoratoraWzorzec budowniczegoWzorzec stanu2Właściwości i hermetyzacja
Własne akcesoryModyfikatory widocznościPrywatne setterylazy i lateinitPowtórka – konto bankowe5Interfejsy
Deklarowanie interfejsówMetody domyślneWiele interfejsówInterfejsy jako typyPowtórzenie – metody płatności8Typy generyczne
Funkcje generyczneKlasy generyczneOgraniczenia typówKowariancja i kontrawariancja: in i outPodsumowanie — kolejka priorytetowa11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książekPoćwicz samodzielnie: Edytor online Kotlin