Ответ
В Kotlin классы по умолчанию final (не наследуемые) для соблюдения принципа "закрытости/открытости" (Open/Closed Principle) из SOLID. Это предотвращает случайное наследование и модификацию поведения класса без явного разрешения. Чтобы разрешить наследование, нужно явно пометить класс как open:
open class Parent // Теперь можно наследоваться
class Child : Parent() // ОК
class NotOpenParent // По умолчанию final
// class ErrorChild : NotOpenParent() // Ошибка: Cannot inherit from final class
Преимущества:
- Защита от неконтролируемого расширения
- Упрощение рефакторинга (меньше зависимостей)
- Явное проектирование иерархий через
open