12.2 Test - Rozhrania (12.1)

Over si svoje vedomosti z kapitoly o rozhraniach. Klikni na Áno alebo Nie - tlačidlo sa hneď zafarbí (zelená = správne, červená = nesprávne) a zobrazí sa komentár s vysvetlením. Otázky prechádzaš po jednej pomocou tlačidiel nižšie.

Otázka 1 / 11

Rozhranie (interface) môže mať vlastný konštruktor, podobne ako abstraktná trieda.

Nie. Na rozdiel od abstraktnej triedy nemôže mať rozhranie konštruktor ani atribúty s vlastným stavom.

Jedna trieda môže v Kotline implementovať viacero rozhraní naraz.

Áno. Napríklad class Airplane : Drivable, Flyable implementuje dve rozhrania súčasne.

Funkcie definované v rozhraní bez tela (napr. fun drive()) musia byť v implementujúcej triede prepísané pomocou override.

Áno. Ak funkcia nemá v rozhraní implementáciu, každá trieda, ktorá rozhranie implementuje, ju musí doplniť.

Rozhranie môže obsahovať predvolenú (default) implementáciu funkcie, ktorú implementujúca trieda nemusí prepisovať.

Áno. Napríklad funkcia log(message: String) s telom priamo v rozhraní Loggable sa dá použiť bez prepísania.

Rozhranie môže deklarovať abstraktný atribút, napríklad val id: Int, ktorý musí implementujúca trieda doplniť hodnotou.

Áno. Atribút v rozhraní môže byť abstraktný (bez hodnoty) alebo s predvolenou implementáciou cez get().

Atribút deklarovaný v rozhraní môže mať priamo uloženú hodnotu (backing field), rovnako ako v triede.

Nie. Atribúty v rozhraní môžu byť len abstraktné, alebo môžu mať vlastný get(), no nemôžu mať vlastný uložený stav (backing field).

Ak dve rozhrania implementované jednou triedou majú rovnakú predvolenú metódu, trieda ju musí prepísať a explicitne vybrať implementáciu pomocou super<RozhranieMeno>.

Áno. Kompilátor v takom prípade vynúti prepísanie metódy, keďže by inak nevedel, ktorú implementáciu použiť.

Rozhranie je vhodnejšie ako abstraktná trieda vtedy, keď potrebujeme zdieľať konkrétny stav (atribúty s hodnotou) medzi podtriedami.

Nie. Na zdieľanie stavu (atribútov s hodnotou) je vhodnejšia abstraktná trieda - rozhranie slúži hlavne na definovanie spoločného správania.

Trieda Car : Drivable musí implementovať všetky funkcie rozhrania Drivable, ktoré v ňom nemajú predvolenú implementáciu.

Áno. Iba funkcie s predvolenou implementáciou nemusí trieda povinne prepisovať.

Trieda môže naraz aj dediť z jednej triedy (aj abstraktnej), aj implementovať viacero rozhraní.

Áno. Obmedzenie na jeden nadradený typ platí len pre triedy, nie pre rozhrania - tých môže byť implementovaných ľubovoľne veľa.

Trieda implementujúca rozhranie musí pred jeho názvom v hlavičke použiť zátvorky, napríklad class Car : Drivable().

Nie. Rozhrania sa (na rozdiel od tried) uvádzajú bez zátvoriek, keďže nemajú konštruktor - správne je class Car : Drivable.

Tvoje skóre je 0 / 11