Абстрактні класи в Kotlin — це класи з яких не можна створити екземпляри безпосередньо. Вони створені для створення ієрархії спадкування і задання поведінки класів спадкоємців. Під поведінкою розуміють реалізацію абстрактних функцій (методів), які оголошені в абстрактному класі. Тобто абстрактні класи задають абстрактні властивості і фукнції, які мають бути реалізовані в класах нащадках.

Абстрактні класи можуть мати конструктори. Ці конструктори ініціалізують властивості класу і задають необхідні параметри для підкласів. Абстрактні класи оголошуються з використанням ключового слова abstract. Вони є відкритими для наслідування, тому ключове слово open не потрібне.

Ось приклад оголошення абстрактного класу Person: abstract class Person(var name:String, var age:Int){ abstract fun introduce() } Оголошення функції introduce() як абстрактної означає, що вона обов'язково повинна бути реалізована у класі нащадку.

Наступний приклад демонструє створення класу Doctor нащадку від класу Person, який реалізовує функцію introduce. Для того, щоб реалізувати функцію використовується слово override (замістити).

abstract class Person(var name:String, var age:Int){ abstract fun introduce() }

class Doctor(name:String, age:Int, var specialization:String):Person (name, age){ override fun introduce() { println ("Мене звати $name і мій вік $age років")

fun main(){ //val person =Person("Анатолій Непийвода", 56) //так не можна, абстрактні класи не ініціалізуються

val doctor=Doctor("Анатолій Непийвода", 56, "терапевт") doctor.introduce() println(doctor.name) }

Абстрактний клас може мати як абстрактні так і неабстрактні члени (властивості та функції). Щоб задекларувати член як абстрактний, ви маєте використовувати ключове слово abstract явно.

abstract class Person(var name:String, var age:Int){ abstract fun introduce() open fun details(){ // неабстрактна функція println ("Ім'я: $name, вік: $age")

Неабстрактні члени успадкуються і можуть бути викликані через об'єкт класу нащадка.