I denne artikkelen vil du lære om abstrakt klasse og hvordan du implementerer den i Kotlin (ved hjelp av eksempler).
Som Java abstract
brukes 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 abstract
nø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
Person
opprettes 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 medopen
nø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 open
nø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 Teacher
avledet 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 Person
klassen.
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 Teacher
klasse).
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.