Arb*_*een 7 inheritance class kotlin
我上课了
open data class Person(var name: String)
Run Code Online (Sandbox Code Playgroud)
和另一堂课
data class Student(var reg: String) : Person("")
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误
错误:修饰符'open'与'data'不兼容
如果我从Person类中删除数据的罚款.
为什么kotlin打开和数据不兼容?
Ant*_*vin 14
来自https://kotlinlang.org/docs/reference/data-classes.html:
为确保生成的代码的一致性和有意义的行为,数据类必须满足以下要求:
- 主构造函数需要至少有一个参数;
- 所有主要构造函数参数都需要标记为val或var;
- 数据类不能是抽象的,开放的,密封的或内部的;
- (1.1之前)数据类只能实现接口.
因此,主要的一点是数据类有一些生成的代码(equals,hashCode,copy,toString,componentN函数).并且程序员不能破坏这样的代码.因此,数据类有一些限制.
正如文档所述,
- 数据类不能是抽象的,开放的,密封的或内部的;
他们不能被继承的原因是,从数据类继承引起的问题/模糊性是如何产生的方法(equals,hashcode等)应该工作.请参阅此处的进一步讨论.
自Kotlin 1.1以来,对数据类的限制已经略有提升:它们现在可以从其他类继承,如相关提案中详细描述的那样.但是,他们仍然不能从类本身继承.
需要注意的是数据类"只"提供了自动的额外便利equals,hashcode,toString,component,和copy功能.如果你不需要那些,那么像下面这样的类仍然具有getter/setter属性和一个非常简短形式的构造函数,并且对如何将它与继承一起使用没有限制:
class User(val name: String, var age: Int)
Run Code Online (Sandbox Code Playgroud)