Для чего сделан запрет наследования от data class

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

Ответ

Data class в Kotlin предназначен для хранения данных и автоматически генерирует equals(), hashCode(), toString(), copy() и componentN(). Наследование запрещено, потому что:

  1. Нарушение контракта equals() — если унаследованный класс добавит новые свойства, сравнение объектов может стать некорректным.
  2. Проблемы с copy() — метод не знает о новых полях подкласса, что приведёт к потере данных.
  3. Компонентные функции (componentN()) — их количество фиксировано, наследование сломает деструктуризацию.

Пример:

data class User(val name: String)
// class Admin(name: String, val role: String) : User(name) // Ошибка: нельзя наследовать data class

Решение: используйте композицию вместо наследования.