V tem članku boste spoznali abstraktni tečaj in kako ga uporabiti v Kotlinu (s pomočjo primerov).
Tako kot Java abstract
se tudi v Kotlinu ključna beseda uporablja za razglasitev abstraktnih razredov. Abstraktnega razreda ni mogoče ustvariti (ne morete ustvariti predmetov abstraktnega razreda). Lahko pa podrazrede podedujete od can them.
Člani (lastnosti in metode) abstraktnega razreda niso abstraktni, razen če abstract
za njihovo abstrakcijo eksplicitno uporabite ključno besedo. Vzemimo primer:
abstraktni razred Oseba (var age: Int = 40 fun displaySSN (ssn: Int) (println ("My SSN is $ ssn.")) abstraktno zabavno displayJob (opis: String))
Tukaj,
- ustvarjen je abstraktni razred
Person
. Predmetov razreda ne morete ustvariti. - razred ima abstraktno lastnostno starost in abstraktno metodo
displaySSN()
. Če morate te člane v podrazredu preglasiti, jih označite sopen
ključno besedo. - Predavanje ima abstraktno metodo
displayJob()
. Nima nobene izvedbe in jo je treba v svojih podrazredih preglasiti.
Opomba: abstraktni razredi so vedno odprti. Za open
podedovanje podrazredov po njih ni treba izrecno uporabljati ključne besede.
Primer: Kotlinov abstraktni razred in metoda
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) )
Ko zaženete program, bo rezultat:
Moje ime je Jack Smith. Sem učiteljica matematike. Moj SSN je 23123.
Tu je razred Teacher
izpeljan iz abstraktnega razreda Person
.
Primerek predmeta predmeta Učitelj je instanciran. "Jack Smith"
Med ustvarjanjem smo kot parameter predali primarnemu konstruktorju. S tem se izvrši inicializacijski blok Person
razreda.
Nato se displayJob()
metoda pokliče z uporabo predmeta jack. Upoštevajte, da je displayJob()
metoda v osnovnem razredu razglašena za abstraktno in v izpeljanem razredu razveljavljena.
Na koncu se displaySSN()
metoda pokliče z uporabo predmeta jack. Metoda ni abstraktna in je deklarirana v razredu Person (in ni deklarirana v Teacher
razredu).
Priporočeno branje: Kotlinovi vmesniki
Kotlinovi vmesniki so podobni abstraktnim razredom. Vendar vmesniki ne morejo shranjevati stanja, medtem ko lahko abstraktni razredi.
To pomeni, da ima vmesnik lastnost, vendar mora biti abstrakten ali pa mora zagotavljati izvedbe dostopnikov. Ker pa lastnost abstraktnega razreda ni abstraktna.