为什么 data class 不能被继承以及如何绕过这个限制?
大家好!我正在学习 Kotlin,遇到了一个问题:我想创建一个包含公共字段的基类数据类,然后从它继承几个 data class。例如,有一个基类 `Person` 包含字段 `name` 和 `age`,然后我想创建 `Employee` 并添加字段 `salary`,以及 `Student` 并添加字段 `group`。但编译器提示:“Data class cannot be extended from other classes”。这是我的代码:
```kotlin
data class Person(val name: String, val age: Int)
data class Employee(name: String, age: Int, val salary: Double) : Person(name, age) // 错误!
```
我明白 data class 会自动生成 `equals()`、`hashCode()`、`toString()`、`copy()` 和 `componentN()`,而继承可能会破坏这些方法的契约。但我需要重用字段和逻辑。如何正确组织数据类的层次结构?也许有某种模式或替代方案?我将感谢代码示例和语言为何这样设计的解释。提前谢谢!