Почему по умолчанию нельзя наследоваться от класса в Kotlin

«Почему по умолчанию нельзя наследоваться от класса в Kotlin» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В 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