Študijné materiály

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ť init blok.

Úlohy

Úloha 1

Vytvor triedu Bod s primárnym konštruktorom pre súradnice x a y.

Úloha 2

Doplň triedu Bod o sekundárny konštruktor, ktorý prijme jednu hodnotu a nastaví obe súradnice na ňu.

Úloha 3

Vytvor triedu Cas bez primárneho konštruktora s konštruktormi pre hodinu a minútu alebo iba pre hodinu.