Kotlin数据类包含开放函数

我正在读kotlin官方教程,在数据课题下 ,我提出了一个以下的观点。

如果超types具有打开并返回兼容types的componentN()函数,则将为数据类生成相应的函数并覆盖超types的函数。 如果超types的function由于不兼容的签名或者是最终的而不能被覆盖,则报告错误;

我的问题是,

1)什么是componentN()函数?

2)数据类是否自动覆盖打开的函数?

3)以下代码是否正确?

 open class SuperDataClass { open fun componentN() { println("from super class") } } data class DataClassExample (var name: String): SuperDataClass() { // } 

1)什么是componentN()函数?

它们是对应于属性声明顺序的操作符函数。

例:

  data class Person(name: String, age: Int) 

上面的类将有一个component1和一个component2function,允许通过解构声明的访问命名和年龄,按顺序。
考虑到componentN函数只是引用第1,2,3,…,第N个分量。 componentN函数本身永远不会生成。

2)数据类是否自动覆盖打开的函数?

在数据类中,你是从Any类扩展,你不是自动覆盖任何function。 componentN函数是在编译时生成的。

3)以下代码是否正确?

 open class SuperDataClass { open fun componentN() { println("from super class") } } data class DataClassExample (var name: String): SuperDataClass() { // } 

是的,它会编译并运行正确。 但是,这只是因为,正如我之前所说的, componentN不是为数据类生成的。
但是,在这种情况下,会为DataClassExample的属性name生成DataClassExample 。 正如你所发布的文档的报价说:如果你尝试这个代码,你会有一个错误。

 open class SuperDataClass { open fun component1() {//<-- note this println("from super class") } } data class DataClassExample (var name: String): SuperDataClass() { // } 

具体的错误是:

 [DATA_CLASS_OVERRIDE_CONFLICT] Function 'component1' generated for the data class conflicts with member of supertype 'SuperDataClass'