Ответ
Абстрактный класс — это класс, который нельзя инстанцировать напрямую. Он служит шаблоном для других классов и может содержать как абстрактные методы (без реализации), так и обычные методы с реализацией.
Ключевые особенности:
- Может иметь абстрактные методы (обязательные для переопределения в наследниках).
- Может содержать реализованные методы.
- Позволяет выносить общую логику в базовый класс.
Пример:
abstract class Animal {
abstract fun makeSound() // Абстрактный метод
fun eat() { println("Eating...") } // Обычный метод
}
class Dog : Animal() {
override fun makeSound() { println("Bark!") }
}
Отличие от интерфейса:
- Абстрактный класс может хранить состояние (поля), интерфейс — нет (до Kotlin 1.4).
- Класс может наследовать только один абстрактный класс, но много интерфейсов.