Котлин абстрактен клас и абстрактни членове

В тази статия ще научите за абстрактния клас и как да го внедрите в 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

Котлин интерфейсите са подобни на абстрактните класове. Интерфейсите обаче не могат да съхраняват състояние, докато абстрактните класове могат.

Значението е, че интерфейсът може да има свойство, но той трябва да е абстрактен или да предоставя реализации на достъп. Докато не е задължително свойството на абстрактния клас да бъде абстрактно.

Интересни статии...