有一个基地 类( var 需要保持保护):
open class Base(protected var id: Int) {}
有接口(interface)需要使用值 :
interface ProviderI {
val id: Int
}
还有一个类继承自 基地 并实现 供应商I 界面。我试图在其中实现接口(interface)的值 使用父类(super class) 变量 (具有相同的名称)。
作为一个不工作的例子,我正在尝试做类似的事情(例子不起作用):
class Instance(id: Int): Base(id), ProviderI {
override val id
get() { return super.id }
}
这个想法很简单,但我已经尝试了一切,每次都报告不同的错误。
最佳答案
要覆盖存在于多个父类(super class)型中的成员,Kotlin 要求它是 open
在 所有父类(super class)型 , 这个限制看起来很自然,否则 final
成员可以很容易地以这种方式被覆盖。
解决方案是制作 id
打开 Base
并将其覆盖为 var
属性(property):
open class Base(protected open var id: Int)
interface ProviderI {
val id: Int
}
class Instance(id: Int): Base(id), ProviderI {
override var id: Int
get() = super.id
set(value) { super.id = value }
}
关于interface - 使用在父类(super class)中定义的同名 var 覆盖在接口(interface)中定义的 val,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46852973/