Šajā rakstā jūs uzzināsiet par abstrakto klasi un to, kā to īstenot Kotlīnā (ar piemēru palīdzību).
Tāpat kā Java, abstract
atslēgvārds tiek izmantots, lai deklarētu abstraktas klases Kotlīnā. Abstraktu klasi nevar instantizēt (jūs nevarat izveidot abstraktas klases objektus). Tomēr jūs varat mantot apakšklases no kannām.
Abstraktās klases dalībnieki (īpašības un metodes) nav abstrakti, ja vien jūs skaidri neizmantojat abstract
atslēgvārdu, lai tos padarītu abstraktus. Ņemsim piemēru:
abstrakta klase Persona (var vecums: Int = 40 jautrs displejsSSN (ssn: Int) (println ("Mans SSN ir $ ssn.")) abstraktais jautrais displayJob (apraksts: virkne))
Šeit,
Person
tiek izveidota abstrakta klase . Jūs nevarat izveidot klases objektus.- klasei ir ne abstrakta īpašuma vecums un ne abstrakta metode
displaySSN()
. Ja jums jāignorē šie dalībnieki apakšklasē, tie ir jāatzīmē aropen
atslēgvārdu. - Klasei ir abstrakta metode
displayJob()
. Tam nav nekādas ieviešanas, un tas ir jāpārspēj apakšklasēs.
Piezīme: Abstraktās nodarbības vienmēr ir atvērtas. open
Lai mantotu no tām apakšklases, jums nav skaidri jāizmanto atslēgvārds.
Piemērs: Kotlina abstraktā klase un 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) )
Palaidot programmu, izeja būs:
Mani sauc Džeks Smits. Es esmu matemātikas skolotājs. Mans SSN ir 23123.
Šeit klase Teacher
tiek atvasināta no abstraktas klases Person
.
Skolotāju klases objektu domkrats tiek instantizēts. To izveidojot, mēs esam nodoti "Jack Smith"
kā parametrs primārajam konstruktoram. Tas izpilda Person
klases inicializētāja bloku .
Tad displayJob()
metodi sauc, izmantojot domkrata objektu. Ņemiet vērā, ka displayJob()
metode tiek pasludināta par abstraktu bāzes klasē un atcelta atvasinātajā klasē.
Visbeidzot, displaySSN()
metodi sauc, izmantojot domkrata objektu. Metode nav abstrakta un deklarēta Personas klasē (un nav deklarēta Teacher
klasē).
Ieteicamā literatūra: Kotlin Interfaces
Kotlina saskarnes ir līdzīgas abstraktām klasēm. Tomēr saskarnes nevar saglabāt stāvokli, bet abstraktās klases var.
Nozīme, interfeisam var būt īpašums, taču tam jābūt abstraktam vai tam jānodrošina piekļuves ieviešana. Tā kā abstraktās klases īpašumam nav obligāti jābūt abstraktam.