В тази статия ще научите за абстрактния клас и как да го внедрите в Kotlin (с помощта на примери).
Подобно на Java, abstract
ключовата дума се използва за деклариране на абстрактни класове в Kotlin. Абстрактен клас не може да бъде инстанциран (не можете да създавате обекти на абстрактен клас). Можете обаче да наследявате подкласове от can them.
Членовете (свойства и методи) на абстрактния клас не са абстрактни, освен ако изрично не използвате abstract
ключова дума, за да ги направите абстрактни. Да вземем пример:
абстрактен клас Person (var age: Int = 40 fun displaySSN (ssn: Int) (println ("My SSN is $ ssn.")) абстрактно забавно displayJob (описание: String))
Тук,
- създава се абстрактен клас
Person
. Не можете да създавате обекти от класа. - класът има абстрактен възрастови свойства и не абстрактен метод
displaySSN()
. Ако трябва да замените тези членове в подкласа, те трябва да бъдат маркирани сopen
ключова дума. - Класът има абстрактен метод
displayJob()
. Той няма никакво изпълнение и трябва да бъде заменен в подкласовете си.
Забележка: Абстрактните класове са винаги отворени. Не е нужно изрично да използвате open
ключова дума, за да наследявате подкласове от тях.
Пример: Абстрактни клас и метод на Kotlin
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) )
Когато стартирате програмата, изходът ще бъде:
Казвам се Джак Смит. Аз съм учител по математика. Моят SSN е 23123.
Тук клас Teacher
се извлича от абстрактния клас Person
.
Създаден е екземпляр на обектен жак на клас Teacher. Предадохме "Jack Smith"
като параметър на основния конструктор, докато го създавахме. Това изпълнява блока на инициализатора на Person
класа.
След това displayJob()
методът се извиква с помощта на обект jack. Обърнете внимание, че displayJob()
методът е обявен за абстрактен в базовия клас и заменен в производния клас.
И накрая, displaySSN()
методът се извиква с помощта на jack обект. Методът не е абстрактен и е деклариран в клас Person (и не е деклариран в Teacher
клас).
Препоръчително четене: Интерфейси на Kotlin
Котлин интерфейсите са подобни на абстрактните класове. Интерфейсите обаче не могат да съхраняват състояние, докато абстрактните класове могат.
Значението е, че интерфейсът може да има свойство, но той трябва да е абстрактен или да предоставя реализации на достъп. Докато не е задължително свойството на абстрактния клас да бъде абстрактно.