Ответ
Data class в Kotlin предназначен для хранения данных и автоматически генерирует equals(), hashCode(), toString(), copy() и componentN(). Наследование запрещено, потому что:
- Нарушение контракта
equals()— если унаследованный класс добавит новые свойства, сравнение объектов может стать некорректным. - Проблемы с
copy()— метод не знает о новых полях подкласса, что приведёт к потере данных. - Компонентные функции (
componentN()) — их количество фиксировано, наследование сломает деструктуризацию.
Пример:
data class User(val name: String)
// class Admin(name: String, val role: String) : User(name) // Ошибка: нельзя наследовать data class
Решение: используйте композицию вместо наследования.