Я знаю о двух различиях между абстрактными классами и интерфейсами в Котлине:
- Абстрактный класс может иметь состояние (например,
var
...) - Класс может реализовывать несколько интерфейсов, но не несколько абстрактных классов.
Поскольку Котлин - довольно свежий язык, мне интересно, почему абстрактные классы не были оставлены? Интерфейсы кажутся превосходным инструментом, с очень малой потребностью в абстрактных классах.
Чтобы уточнить: Kotlin поддерживает реализацию конкретных функций в интерфейсах, например:
interface Shiny {
fun shine(amount : Int) // abstract function
fun reflect(s : String) { print ("**$s**") } // concrete function
}
Может ли кто-нибудь дать сильный практический пример необходимости абстрактных классов?