U ovom ćete članku naučiti o apstraktnoj klasi i kako je primijeniti u Kotlinu (uz pomoć primjera).
Kao i Java, abstract
ključna riječ koristi se za deklariranje apstraktnih klasa u Kotlinu. Apstraktna klasa ne može se instancirati (ne možete stvoriti objekte apstraktne klase). Međutim, podnaslove možete naslijediti iz njih.
Članovi (svojstva i metode) apstraktne klase nisu apstraktni, osim ako eksplicitno koristite abstract
ključnu riječ da biste ih učinili apstraktnim. Uzmimo primjer:
sažetak klase Osoba (var age: Int = 40 zabava displaySSN (ssn: Int) (println ("Moj SSN je $ ssn.")) sažetak zabave displayJob (opis: String))
Ovdje,
- stvara se apstraktna klasa
Person
. Ne možete stvoriti objekte klase. - razred ima ne-apstraktnu dob svojstva i ne-apstraktnu metodu
displaySSN()
. Ako trebate nadjačati ove članove u podrazredu, trebali bi biti označeniopen
ključnom riječi. - Predavanje ima apstraktnu metodu
displayJob()
. Nema nikakvu implementaciju i mora se nadjačati u svojim podrazredima.
Napomena: Sažeci su uvijek otvoreni. Ne trebate izričito koristiti open
ključnu riječ za nasljeđivanje potklasa od njih.
Primjer: Sažetak klase i metode Kotlina
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) )
Kada pokrenete program, izlaz će biti:
Zovem se Jack Smith. Ja sam profesor matematike. Moj SSN je 23123.
Ovdje je klasa Teacher
izvedena iz apstraktne klase Person
.
Instanciran je objektni priključak klase Teacher. Prilikom stvaranja proslijedili smo "Jack Smith"
kao parametar primarnom konstruktoru. Ovim se izvršava blok inicijalizatora Person
klase.
Zatim se displayJob()
metoda poziva pomoću objekta jack. Imajte na umu da je displayJob()
metoda proglašena apstraktnom u osnovnoj klasi, a nadjačana u izvedenoj klasi.
Napokon, displaySSN()
metoda se poziva pomoću objekta jack. Metoda nije apstraktna i deklarirana je u klasi Person (i nije deklarirana u Teacher
klasi).
Preporučena literatura: Kotlin sučelja
Kotlin sučelja slična su apstraktnim klasama. Međutim, sučelja ne mogu pohraniti stanje, dok apstraktne klase to mogu.
Znači, sučelje može imati svojstvo, ali mora biti apstraktno ili mora osigurati implementacije pristupa. Iako svojstvo apstraktne klase nije obavezno da bude apstraktno.