V predchádzajúcej lekcii sme videli primárny konštruktor. Okrem neho môžeme mať v triede aj sekundárne konštruktory, ktoré používame keď chceme viacero možností ako vytvoriť objekt:
class Person(val name: String, var age: Int) {
constructor(name: String) : this(name, 0) {
println("Vek nebol zadany, nastavujem na 0")
}
}
fun main() {
val p1 = Person("Janko", 25) // pouzije primarny konstruktor
val p2 = Person("Fero") // pouzije sekundarny konstruktor
println(p2.age) // 0
}
Sekundárny konštruktor musí vždy zavolať primárny konštruktor pomocou this(...) alebo iný sekundárny konštruktor.
Ak nepotrebujeme primárny konštruktor, môžeme ho vynechať:
class Config {
var width: Int = 0
var height: Int = 0
constructor(w: Int, h: Int) {
width = w
height = h
}
constructor(size: Int) {
width = size
height = size
}
}
fun main() {
val c1 = Config(1920, 1080)
val c2 = Config(500)
println("${c1.width}x${c1.height}") // 1920x1080
println("${c2.width}x${c2.height}") // 500x500
}
Pozor: Ak nemáme primárny konštruktor, sekundárne konštruktory nemusia volať
this(...). V takom prípade je ale lepšie použiťinitblok.
Vytvor triedu Bod s primárnym konštruktorom pre súradnice x a y.
Doplň triedu Bod o sekundárny konštruktor, ktorý prijme jednu hodnotu a nastaví obe súradnice na ňu.
Vytvor triedu Cas bez primárneho konštruktora s konštruktormi pre hodinu a minútu alebo iba pre hodinu.