Этот вопрос проверяет понимание ограничений data class в Kotlin и их места в иерархии классов.
data class по умолчанию не могут наследоваться от других классов и не могут быть базовыми классами для наследования. Они генерируют методы equals/hashCode, toString и copy, что накладывает ограничения на иерархию. Если нужно наследование, обычно используют обычный класс или интерфейсы.
data class оптимизированы для хранения данных и автоматически генерируют ряд методов. Из-за этого Kotlin не позволяет делать их открытыми для наследования и не разрешает наследоваться от других классов.
Особенности:
data class всегда неявно final.
Нельзя объявить open data class.
Они могут реализовывать интерфейсы, но не наследовать классы.
Пример:
data class User(val name: String, val age: Int)
// Ошибка: Cannot inherit from 'User' as it is final
// class SpecialUser(name: String, age: Int, val vip: Boolean) : User(name, age)Когда это важно:
При проектировании моделей данных не рассчитывайте на полиморфизм через наследование data class.
Для распределения общей логики используйте интерфейсы или делегирование.