【发布时间】:2021-01-10 02:31:06
【问题描述】:
我有一个这样的 java 类:
class A {
public void foo() {...}
}
然后在 Kotlin 中,一个类:
class B: A() {}
我是从 B 扩展而来,但使用一个带委托的接口来覆盖 A.foo,即
interface IFoo {
fun foo()
}
class FooImpl: IFoo {
override fun foo() { ... }
}
这就是问题所在,我用它作为
class C: B(), IFoo by FooImpl() {}
但我收到了foo() hides supertype override... please specify proper override explicitly 的错误。我在哪里做这个?
【问题讨论】:
-
Kotlin 不支持使用它的类的委托覆盖函数。委托完全不知道使用它的类。即使使用它的类重写了它的方法之一,如果委托的方法之一调用了被重写的方法,它也会调用它自己的实现,而不是重写。
-
我得到了这个工作:pl.kotl.in/vqT-4G9mG - 同样的事情,但基类是 kotlin 的(我在那里做了什么不同的事情吗?)
-
哦,也许它适用于 Kotlin 基类。我没试过。
标签: class kotlin inheritance overriding delegation