Definiowanie klas
Część sekcji Programowanie obiektowe ścieżki Kotlin w Coddy. Lekcja 2 z 57.
Klasa opisuje rodzaj obiektu: dane, które przechowuje, i to, co potrafi robić. class Dog { ... } deklaruje typ, a Dog() tworzy obiekt tego typu, czyli instancję. Kotlin nie ma słowa kluczowego new:
class Dog {
var name = "Rex"
var age = 3
}Wewnątrz main:
val dog = Dog()
println(dog.name)
println(dog.age)Wynik:
Rex
3Zmienne wewnątrz klasy to jej właściwości. Każda instancja ma własną kopię, którą można odczytywać i zmieniać za pomocą kropki:
class Dog {
var name = "Rex"
}Wewnątrz main:
val first = Dog()
val second = Dog()
second.name = "Bella"
println(first.name)
println(second.name)Wynik:
Rex
BellaFunkcja wewnątrz klasy to metoda (w Kotlinie nazywa się je funkcjami składowymi). Metoda może odczytywać i zmieniać właściwości instancji, na której jest wywoływana:
class Counter {
var count = 0
fun increment() {
count++
}
fun report() = "count is $count"
}Wewnątrz main:
val clicks = Counter()
clicks.increment()
clicks.increment()
println(clicks.report())Wynik:
count is 2Nazwy klas zapisuje się w notacji UpperCamelCase (BankAccount); właściwości i metody zapisuje się w notacji lowerCamelCase (balance, deposit()). Grupowanie danych wraz z funkcjami, które na nich operują, to podstawowa idea programowania obiektowego: kod korzystający z Counter wywołuje increment() i nigdy nie musi wiedzieć, jak przechowywana jest liczba.
class BankAccount {
var balance = 0
fun deposit(amount: Int) {
balance += amount
}
}Wyzwanie
ŁatwyUzupełnij metodę describe() klasy Pet. Zwraca ona jedno zdanie zbudowane na podstawie właściwości: zwierzę o imieniu Rex, gatunku dog i wieku 3 daje Rex is a 3 year old dog.
Podany kod tworzy obiekt Pet, ustawia jego właściwości na podstawie danych wejściowych (imię, gatunek, wiek) i wypisuje wynik describe().
Twój kod umieść w pliku Pet.kt. Plik Main.kt zawiera podany 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 pet = Pet()
pet.name = input[0]
pet.species = input[1]
pet.age = input[2].toInt()
println(pet.describe())
}
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