Какие знаешь ограничения при наследовании от data class

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

Ответ

Наследование от data class в Kotlin имеет несколько ограничений:

  1. Нельзя наследовать от data class, если класс объявлен как final (по умолчанию все data classfinal).
    open data class User(val name: String) // Ошибка: data class не может быть open
  1. Нельзя наследовать data class от другого data class — это запрещено на уровне языка.

  2. Если родительский класс — 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.