Selles artiklis saate teada abstraktsest klassist ja selle rakendamisest Kotlinis (näidete abil).
Nagu Java, abstract
kasutatakse märksõna Kotlini abstraktsete klasside deklareerimiseks. Abstraktset klassi ei saa instantsida (te ei saa luua abstraktse klassi objekte). Alamklassid saate pärida ka purkidest.
Abstraktse klassi liikmed (omadused ja meetodid) ei ole abstraktsed, välja arvatud juhul, kui kasutate abstract
nende abstraktseks muutmiseks sõnaselgelt märksõna. Võtame näite:
abstraktne klass Isik (var vanus: keskmine = 40 lõbus kuvaSSN (ssn: Int) (println ("Minu SSN on $ ssn.")) abstraktne lõbus ekraanitöö (kirjeldus: string))
Siin,
- luuakse abstraktne klass
Person
. Te ei saa klassi objekte luua. - klassil on mitte-abstraktse omandi vanus ja mitte-abstraktne meetod
displaySSN()
. Kui peate alamklassis need liikmed alistama, tuleks needopen
märksõnaga tähistada . - Klassil on abstraktne meetod
displayJob()
. Sellel pole rakendust ja see tuleb alamklassides tühistada.
Märkus: abstraktsed tunnid on alati avatud. open
Alamklasside pärimiseks neist ei pea otseselt märksõna kasutama.
Näide: Kotlini abstraktne klass ja meetod
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) )
Programmi käivitamisel on väljund järgmine:
Minu nimi on Jack Smith. Olen matemaatikaõpetaja. Minu SSN on 23123.
Siin on klass Teacher
tuletatud abstraktsest klassist Person
.
Õpetajaklassi objektide pesa on instantsitud. Oleme selle loomisel edastanud "Jack Smith"
parameetrina peamise konstruktori. See käivitab Person
klassi initsiaatori ploki .
Seejärel displayJob()
nimetatakse meetodit jack-objekti abil. Pange tähele, et displayJob()
meetod tunnistatakse põhiklassis abstraktseks ja tuletatud klassis tühistatuks.
Lõpuks displaySSN()
nimetatakse meetodit jack objekti kasutamiseks. Meetod ei ole abstraktne ja deklareeritud klassis Isik (ja Teacher
klassis deklareerimata ).
Soovitatav lugemine: Kotlini liidesed
Kotlini liidesed sarnanevad abstraktsete klassidega. Liidesed ei saa aga olekut salvestada, abstraktsed klassid aga küll.
See tähendab, et liidesel võib olla omadus, kuid see peab olema abstraktne või pakkuma juurdepääsurakendusi. Kusjuures abstraktse klassi omaduste abstraktsus pole kohustuslik.