Kotlin abstrakt klasse og abstrakte medlemmer

I denne artikkelen vil du lære om abstrakt klasse og hvordan du implementerer den i Kotlin (ved hjelp av eksempler).

Som Java abstractbrukes nøkkelord for å erklære abstrakte klasser i Kotlin. En abstrakt klasse kan ikke instantieres (du kan ikke lage objekter fra en abstrakt klasse). Du kan imidlertid arve underklasser fra kan dem.

Medlemmene (egenskaper og metoder) til en abstrakt klasse er ikke-abstrakte, med mindre du eksplisitt bruker abstractnøkkelord for å gjøre dem abstrakte. La oss ta et eksempel:

 abstrakt klasse Person (var age: Int = 40 fun displaySSN (ssn: Int) (println ("My SSN is $ ssn.")) abstract fun displayJob (beskrivelse: String))

Her,

  • det Personopprettes en abstrakt klasse . Du kan ikke lage objekter fra klassen.
  • klassen har en ikke-abstrakt eiendomsalder og en ikke-abstrakt metode displaySSN(). Hvis du trenger å overstyre disse medlemmene i underklassen, bør de være merket med opennøkkelord.
  • Klassen har en abstrakt metode displayJob(). Den har ingen implementering og må overstyres i underklassene.

Merk: Abstrakte klasser er alltid åpne. Du trenger ikke eksplisitt å bruke opennøkkelord for å arve underklasser fra dem.

Eksempel: Kotlin abstrakt klasse og metode

 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) )

Når du kjører programmet, vil utdataene være:

Jeg heter Jack Smith. Jeg er matematikklærer. Mitt SSN er 23123.

Her er en klasse Teacheravledet fra en abstrakt klasse Person.

En gjenstandskontakt i lærerklassen blir instantiert. Vi har gått "Jack Smith"som en parameter til den primære konstruktøren mens vi opprettet den. Dette kjører initialiseringsblokken til Personklassen.

Deretter displayJob()kalles metoden ved hjelp av jackobjekt. Merk at displayJob()metoden er erklært abstrakt i basisklassen, og overstyrt i den avledede klassen.

Til slutt displaySSN()kalles metoden ved hjelp av jackobjekt. Metoden er ikke-abstrakt og erklært i Person-klasse (og ikke erklært i Teacherklasse).

Anbefalt lesing: Kotlin-grensesnitt

Kotlin-grensesnitt ligner på abstrakte klasser. Imidlertid kan grensesnitt ikke lagre tilstand mens abstrakte klasser kan.

Betydning, grensesnitt kan ha eiendom, men det må være abstrakt eller må gi tilgangsimplementeringer. Mens det ikke er obligatorisk for eiendommer til en abstrakt klasse å være abstrakte.

Interessante artikler...