Tässä artikkelissa opit abstraktista luokasta ja siitä, miten se toteutetaan Kotlinissa (esimerkkien avulla).
Kuten Java, abstract
avainsanaa käytetään abstraktien luokkien julistamiseen Kotlinissa. Abstraktia luokkaa ei voida instantisoida (et voi luoda abstraktin luokan objekteja). Voit kuitenkin periä alaluokat niistä.
Abstraktin luokan jäsenet (ominaisuudet ja menetelmät) eivät ole abstrakteja, ellet käytä abstract
avainsanaa yksiselitteisesti abstraktin tekemiseen. Otetaan esimerkki:
abstrakti luokka Henkilö (vaihteluväli: Int = 40 hauskaa näyttöSSN (ssn: Int) (println ("SSN on $ ssn.")) abstrakti hauska näyttöJob (kuvaus: Merkkijono))
Tässä,
- luodaan abstrakti luokka
Person
. Et voi luoda luokan objekteja. - luokassa on ei-abstrakti omaisuusikä ja ei-abstrakti menetelmä
displaySSN()
. Jos sinun on ohitettava nämä jäsenet alaluokassa, ne on merkittäväopen
avainsanalla. - Luokalla on abstrakti menetelmä
displayJob()
. Sillä ei ole toteutusta, ja se on ohitettava sen alaluokissa.
Huomaa: Abstraktit luokat ovat aina avoimia. Sinun ei tarvitse käyttää nimenomaisesti open
avainsanaa aliluokkien perimiseen niistä.
Esimerkki: Kotlinin abstrakti luokka ja menetelmä
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) )
Kun suoritat ohjelmaa, tulos on:
Nimeni on Jack Smith. Olen matematiikan opettaja. SSN on 23123.
Täällä luokka Teacher
johdetaan abstraktista luokasta Person
.
Opettajan luokan objektiliitin on instantioitu. Olemme välittäneet "Jack Smith"
parametrina ensisijaiselle rakentajalle sitä luodessamme. Tämä suorittaa Person
luokan alustuslohkon .
Sitten displayJob()
menetelmää kutsutaan käyttämällä jack-objektia. Huomaa, että displayJob()
menetelmä julistetaan abstraktiksi perusluokassa ja ohitetaan johdetussa luokassa.
Lopuksi displaySSN()
menetelmää kutsutaan käyttämällä jack-objektia. Menetelmä ei ole abstrakti ja ilmoitettu Henkilö-luokassa (eikä sitä ilmoiteta Teacher
luokassa).
Suositeltava lukeminen: Kotlin Interfaces
Kotlin-rajapinnat ovat samanlaisia kuin abstraktit luokat. Liitännät eivät kuitenkaan voi tallentaa tilaa, kun taas abstraktit luokat voivat.
Merkitys, rajapinnalla voi olla ominaisuus, mutta sen on oltava abstrakti tai sen on tarjottava käyttöoikeustoteutuksia. Abstraktin luokan ominaisuuden ei kuitenkaan tarvitse olla abstraktia.