Можно ли использовать модификатор open с data class

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

Ответ

Да, можно, но это не имеет особого смысла. data class уже автоматически делает все свойства public (если не указано иное), а модификатор open разрешает наследование.

Однако, data class по умолчанию final, и если нужно разрешить наследование, то open можно добавить:

open data class User(val name: String, val age: Int)

Но учти:

  1. Наследование от data class может нарушить контракт equals()/hashCode().
  2. Копирование (copy()) будет работать только для текущего класса, а не для наследников.

Лучше избегать такого подхода, если нет четкой необходимости.