gpt4 book ai didi

inheritance - 如何让数据类在 Kotlin 中实现接口(interface)/扩展父类(super class)属性?

转载 作者:IT老高 更新时间:2023-10-28 13:44:55 27 4
gpt4 key购买 nike

我有几个数据类,其中包括 var id: Int? 字段。我想在 interfacesuperclass 中表达这一点,并让数据类扩展它并在构造时设置此 id。但是,如果我尝试这样做:

interface B {
var id: Int?
}

data class A(var id: Int) : B(id)

它提示我正在覆盖 id 字段,我是哈哈..

Q:在这种情况下,如何让数据类A在构造时获取一个id,并设置该idinterfacesuperclass 中声明?

最佳答案

确实,您不需要 abstract class然而。您可以覆盖 interface属性,例如:

interface B {
val id: Int?
}

// v--- override the interface property by `override` keyword
data class A(override var id: Int) : B

interface没有构造函数,所以你不能通过 super(..) 关键字调用构造函数,但是你可以使用 abstract class反而。然而,一个 data class无法在其 primary constructor 上声明任何参数,因此它将覆盖父类(super class)的字段,例如:

//               v--- makes it can be override with `open` keyword
abstract class B(open val id: Int?)

// v--- override the super property by `override` keyword
data class A(override var id: Int) : B(id)
// ^
// the field `id` in the class B is never used by A

// pass the parameter `id` to the super constructor
// v
class NormalClass(id: Int): B(id)

关于inheritance - 如何让数据类在 Kotlin 中实现接口(interface)/扩展父类(super class)属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45149547/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com