Kotlinin tiivistelmäluokka ja abstraktit jäsenet

Tässä artikkelissa opit abstraktista luokasta ja siitä, miten se toteutetaan Kotlinissa (esimerkkien avulla).

Kuten Java, abstractavainsanaa 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ä abstractavainsanaa 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ä openavainsanalla.
  • 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 openavainsanaa 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 Teacherjohdetaan abstraktista luokasta Person.

Opettajan luokan objektiliitin on instantioitu. Olemme välittäneet "Jack Smith"parametrina ensisijaiselle rakentajalle sitä luodessamme. Tämä suorittaa Personluokan 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 Teacherluokassa).

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.

Mielenkiintoisia artikkeleita...