Ключевое слово abstract
Ключевое слово abstract применяется для объявления
абстрактных классов и методов. Абстрактный класс не может
быть инстанциирован напрямую и служит базой для других классов.
Абстрактные методы не имеют реализации и должны быть
переопределены в классах-наследниках.
Синтаксис
abstract class ClassName {
abstract fun methodName(): ReturnType
}
abstract fun methodName(): ReturnType
Пример
Создадим абстрактный класс Animal с абстрактным
методом makeSound:
abstract class Animal {
abstract fun makeSound(): String
}
Пример
Создадим класс Dog, наследующий Animal,
и реализуем абстрактный метод:
class Dog : Animal() {
override fun makeSound(): String {
return "Woof!"
}
}
Пример
Создадим класс Cat, наследующий Animal,
и реализуем абстрактный метод:
class Cat : Animal() {
override fun makeSound(): String {
return "Meow!"
}
}
Пример
Продемонстрируем использование созданных классов:
val dog = Dog()
val cat = Cat()
println(dog.makeSound())
println(cat.makeSound())
Результат выполнения кода:
String "Woof!"
String "Meow!"
Пример
Абстрактный класс может содержать как абстрактные, так и обычные методы с реализацией:
abstract class Vehicle {
abstract fun startEngine(): String
fun stopEngine(): String {
return "Engine stopped"
}
}
class Car : Vehicle() {
override fun startEngine(): String {
return "Car engine started"
}
}
Пример
Абстрактные классы могут иметь абстрактные свойства:
abstract class Shape {
abstract val area: Double
}
class Circle(val radius: Double) : Shape() {
override val area: Double
get() = Math.PI * radius * radius
}