Kotlini abstraktne klass ja abstraktsed liikmed

Selles artiklis saate teada abstraktsest klassist ja selle rakendamisest Kotlinis (näidete abil).

Nagu Java, abstractkasutatakse 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 abstractnende 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 need openmä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. openAlamklasside 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 Teachertuletatud abstraktsest klassist Person.

Õpetajaklassi objektide pesa on instantsitud. Oleme selle loomisel edastanud "Jack Smith"parameetrina peamise konstruktori. See käivitab Personklassi 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 Teacherklassis 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.

Huvitavad Artiklid...