Ответ
Наследование от data class в Kotlin имеет несколько ограничений:
- Нельзя наследовать от
data class, если класс объявлен какfinal(по умолчанию всеdata class—final).
open data class User(val name: String) // Ошибка: data class не может быть open
-
Нельзя наследовать
data classот другогоdata class— это запрещено на уровне языка. -
Если родительский класс —
sealedилиabstract, то его наследник может бытьdata class, но с оговорками:- Автоматически сгенерированные методы (
equals,hashCode,toString,copy) будут учитывать только свойства самогоdata class, а не родителя.
- Автоматически сгенерированные методы (
Пример:
abstract class Entity(val id: Int)
data class User(val name: String, override val id: Int) : Entity(id)
// toString() выведет только User(name=..., id=...), без полей Entity
Лучше использовать композицию вместо наследования с data class.