У овом чланку ћете научити о апстрактној класи и како је применити у Котлину (уз помоћ примера).
Као и Јава, abstract
кључна реч се користи за декларисање апстрактних класа у Котлину. Апстрактна класа не може бити инстанцирана (не можете креирати објекте апстрактне класе). Међутим, поднаслове можете наследити из њих.
Чланови (својства и методе) апстрактне класе нису апстрактни, осим ако експлицитно не користите abstract
кључну реч да бисте их учинили апстрактним. Узмимо пример:
апстрактна класа Особа (вар аге: Инт = 40 забава дисплаиССН (ссн: Инт) (принтлн („Мој ССН је $ ссн.“)) апстрактна забава дисплаиЈоб (опис: Низ)
Ево,
- ствара се апстрактна класа
Person
. Не можете креирати објекте класе. - разред има не-апстрактно својство старости и не-апстрактну методу
displaySSN()
. Ако требате да замените ове чланове у подкласи, они би требали бити означениopen
кључном речи. - Час има апстрактну методу
displayJob()
. Нема никакву имплементацију и мора се поништити у својим подкласама.
Напомена: Апстрактни часови су увек отворени. Не требате изричито да користите open
кључну реч за наслеђивање поткласа од њих.
Пример: Котлин апстрактна класа и метода
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) )
Када покренете програм, излаз ће бити:
Зовем се Јацк Смитх. Ја сам професор математике. Мој ССН је 23123.
Овде је класа Teacher
изведена из апстрактне класе Person
.
Инстанциран је објектни прикључак класе Теацхер. "Jack Smith"
Приликом креирања проследили смо као параметар примарном конструктору. Овим се извршава блок иницијализатора Person
класе.
Затим се displayJob()
метода позива помоћу објекта јацк. Имајте на уму да је displayJob()
метода проглашена апстрактном у основној класи, а замењена у изведеној класи.
Коначно, displaySSN()
метода се позива помоћу објекта јацк. Метода није апстрактна и декларисана је у класи Персон (и није декларисана у Teacher
класи).
Препоручена литература: Котлин интерфејси
Котлин интерфејси су слични апстрактним класама. Међутим, интерфејси не могу да чувају стање, док апстрактне класе то могу.
Значи, интерфејс може имати својство, али мора бити апстрактно или мора да обезбеди имплементације приступа. Док својство апстрактне класе није обавезно да буде апстрактно.