I denne artikel lærer du om abstrakt klasse og hvordan du implementerer den i Kotlin (ved hjælp af eksempler).
Ligesom Java abstract
bruges nøgleord til at erklære abstrakte klasser i Kotlin. En abstrakt klasse kan ikke instantieres (du kan ikke oprette objekter fra en abstrakt klasse). Du kan dog arve underklasser fra kan dem.
Medlemmerne (egenskaber og metoder) til en abstrakt klasse er ikke-abstrakte, medmindre du eksplicit bruger abstract
nøgleord for at gøre dem abstrakte. Lad os tage et eksempel:
abstrakt klasse Person (var alder: Int = 40 sjov displaySSN (ssn: Int) (println ("Mit SSN er $ ssn.")) abstrakt sjov displayJob (beskrivelse: String))
Her,
Person
der oprettes en abstrakt klasse . Du kan ikke oprette objekter fra klassen.- klassen har en ikke-abstrakt ejendomsalder og en ikke-abstrakt metode
displaySSN()
. Hvis du har brug for at tilsidesætte disse medlemmer i underklassen, skal de markeres medopen
nøgleord. - Klassen har en abstrakt metode
displayJob()
. Det har ingen implementering og skal tilsidesættes i dets underklasser.
Bemærk: Abstrakte klasser er altid åbne. Du behøver ikke eksplicit at bruge open
nøgleord for at 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 kører programmet, vil output være:
Jeg hedder Jack Smith. Jeg er matematiklærer. Mit SSN er 23123.
Her er en klasse Teacher
afledt af en abstrakt klasse Person
.
Et objektstik fra lærerklassen er instantieret. Vi har videregivet "Jack Smith"
som en parameter til den primære konstruktør, mens vi oprettede den. Dette udfører initialiseringsblokken for Person
klassen.
Derefter displayJob()
kaldes metoden ved hjælp af jackobjekt. Bemærk, at displayJob()
metoden erklæres abstrakt i basisklassen og tilsidesættes i den afledte klasse.
Endelig displaySSN()
kaldes metoden ved hjælp af jackobjekt. Metoden er ikke-abstrakt og erklæres i Person-klasse (og ikke erklæret i Teacher
klasse).
Anbefalet læsning: Kotlin-grænseflader
Kotlin-grænseflader svarer til abstrakte klasser. Imidlertid kan grænseflader ikke gemme tilstand, mens abstrakte klasser kan.
Betydning, interface kan have egenskab, men det skal være abstrakt eller skal give accessorimplementeringer. Mens det ikke er obligatorisk at ejendom tilhørende en abstrakt klasse er abstrakt.