Kotlin abstrakt klasse og abstrakte medlemmer

I denne artikel lærer du om abstrakt klasse og hvordan du implementerer den i Kotlin (ved hjælp af eksempler).

Ligesom Java abstractbruges 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 abstractnø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,

  • Personder 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 med opennø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 opennø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 Teacherafledt 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 Personklassen.

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

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.

Interessante artikler...