Data классы в Kotlin используются для хранения данных. Они автоматически генерируют полезные методы equals(), hashCode(), toString(), copy(), а также компоненты для деструктуризации.
kotlin
Sealed классы используются для представления ограниченной иерархии классов. Все подклассы должны быть определены в том же файле, что и сам sealed класс (в Kotlin 1.5+ это ограничение ослаблено). Это позволяет компилятору убедиться в исчерпывающем переборе подклассов, например, в выражении when.
kotlin
Основные отличия:
when исчерпывающий перебор: компилятор Kotlin может проверить исчерпывающий перебор подклассов sealed класса в when без ветки else.И sealed, и data классы могут быть абстрактными, однако data классы не могут быть open (поскольку они final по умолчанию) и не могут реализовывать open методы напрямую (только через интерфейсы или абстрактные классы). Sealed классы по умолчанию абстрактны, а их конструкторы приватные.