V tomto článku sa dozviete o abstraktnej triede a o tom, ako ju implementovať v Kotline (pomocou príkladov).
Rovnako ako Java sa abstract
kľúčové slovo používa na deklarovanie abstraktných tried v Kotline. Abstraktnú triedu nemožno vytvoriť inštanciou (nemôžete vytvárať objekty abstraktnej triedy). Z nich však môžete dediť podtriedy.
Členovia (vlastnosti a metódy) abstraktnej triedy nie sú abstraktní, pokiaľ abstract
na ich abstraktné použitie výslovne nepoužívate kľúčové slovo. Uveďme si príklad:
abstraktná trieda Osoba (vek: Int = 40 zábavných displaySSN (ssn: Int) (println ("Moje SSN je $ ssn.")) abstraktná zábavná displayJob (popis: String))
Tu,
- vytvorí sa abstraktná trieda
Person
. Nemôžete vytvárať objekty triedy. - trieda má neabstrahujúcu vlastnosť age a neabstrahovú metódu
displaySSN()
. Ak potrebujete týchto členov v podtriede prepísať, mali by byť označeníopen
kľúčovým slovom. - Hodina má abstraktnú metódu
displayJob()
. Nemá žiadnu implementáciu a musí byť prepísaná vo svojich podtriedach.
Poznámka: Abstraktné triedy sú vždy otvorené. Na open
zdedenie podtried z nich nemusíte výslovne používať kľúčové slovo.
Príklad: Kotlinova abstraktná trieda a metóda
abstract class Person(name: String) ( init ( println("My name is $name.") ) fun displaySSN(ssn: Int) ( println("My SSN is $ssn.") ) abstract fun displayJob(description: String) ) class Teacher(name: String): Person(name) ( override fun displayJob(description: String) ( println(description) ) ) fun main(args: Array) ( val jack = Teacher("Jack Smith") jack.displayJob("I'm a mathematics teacher.") jack.displaySSN(23123) )
Po spustení programu bude výstup:
Moje meno je Jack Smith. Som učiteľ matematiky. Moje SSN je 23123.
Tu je trieda Teacher
odvodená od abstraktnej triedy Person
.
Vytvorí sa inštancia objektového konektora triedy Učiteľ. "Jack Smith"
Pri vytváraní sme prešli ako parameter k primárnemu konštruktoru. Týmto sa vykoná inicializačný blok Person
triedy.
Potom sa displayJob()
metóda volá pomocou objektu jack. Upozorňujeme, že displayJob()
metóda je v základnej triede deklarovaná ako abstraktná a v odvodenej triede prepísaná.
Nakoniec sa displaySSN()
metóda volá pomocou objektu jack. Metóda nie je abstraktná a je deklarovaná v triede Person (a nedeklarovaná v Teacher
triede).
Odporúčame prečítať : Kotlinské rozhrania
Rozhrania Kotlin sú podobné abstraktným triedam. Rozhrania však nemôžu ukladať stav, zatiaľ čo abstraktné triedy áno.
To znamená, že rozhranie môže mať vlastnosť, ale musí byť abstraktné alebo musí poskytovať implementácie prístupového modulu. Zatiaľ čo vlastnosť abstraktnej triedy nie je povinná byť abstraktnou.