I den här artikeln lär du dig om abstrakt klass och hur du implementerar den i Kotlin (med hjälp av exempel).
Precis som Java används abstract
nyckelord för att deklarera abstrakta klasser i Kotlin. En abstrakt klass kan inte initieras (du kan inte skapa objekt i en abstrakt klass). Du kan dock ärva underklasser från kan dem.
Medlemmarna (egenskaper och metoder) i en abstrakt klass är icke-abstrakta om du inte använder abstract
sökord för att göra dem abstrakta. Låt oss ta ett exempel:
abstrakt klass Person (var ålder: Int = 40 rolig displaySSN (ssn: Int) (println ("Mitt SSN är $ ssn.")) abstrakt roligt displayJob (beskrivning: String))
Här,
- en abstrakt klass
Person
skapas. Du kan inte skapa objekt i klassen. - klassen har en icke-abstrakt egenskapsålder och en icke-abstrakt metod
displaySSN()
. Om du behöver åsidosätta dessa medlemmar i underklassen ska de markeras medopen
nyckelord. - Klassen har en abstrakt metod
displayJob()
. Det har ingen implementering och måste åsidosättas i dess underklasser.
Obs! Abstraktklasser är alltid öppna. Du behöver inte uttryckligen använda open
nyckelord för att ärva underklasser från dem.
Exempel: Kotlin abstrakt klass och metod
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ör programmet blir resultatet:
Jag heter Jack Smith. Jag är matematiklärare. Mitt SSN är 23123.
Här Teacher
härrör en klass från en abstrakt klass Person
.
Ett objektjack i lärarklassen är instanserat. Vi har skickat "Jack Smith"
som en parameter till den primära konstruktören när vi skapade den. Detta kör initialiseringsblocket för Person
klassen.
Sedan displayJob()
kallas metoden med hjälp av jack-objekt. Observera att displayJob()
metoden deklareras abstrakt i basklassen och åsidosätts i den härledda klassen.
Slutligen displaySSN()
kallas metoden med hjälp av jack-objekt. Metoden är icke-abstrakt och deklareras i Person-klass (och inte deklareras i Teacher
klass).
Rekommenderad läsning: Kotlin-gränssnitt
Kotlin-gränssnitt liknar abstrakta klasser. Gränssnitt kan dock inte lagra tillstånd medan abstrakta klasser kan.
Betydelse, gränssnitt kan ha egendom men det måste vara abstrakt eller måste tillhandahålla accessorimplementeringar. Det är inte obligatoriskt att en abstrakt klass har en abstrakt egendom.