interface - 使用在父类(super class)中定义的同名 var 覆盖在接口(interface)中定义的 val

标签 interface kotlin subclass superclass

有一个基地 类( 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/

相关文章:

java - 在接口(interface)中编写类有什么用

c# - 我如何从方法返回 IEnumerable<T>

java - 继承和接口(interface)设计改进

java - 如何在android keystore 中存储私钥?

java - 未找到 sun.security.ssl.SSLSessionImpl

gradle - Kotlin 添加集成测试模块

java - Android/Java : Multiple similar classes needing a super class, 不知道从哪里开始

Java:方法签名中类型的子类

python - 使用多个 __init__ 参数子类化元组

c# - 将 List<MyObject> 转换为 List<IMyInterface> 的最佳方法是什么?