Class 如何在kotlin中显式指定适当的重写
我有一个java类:Class 如何在kotlin中显式指定适当的重写,class,kotlin,inheritance,overriding,delegation,Class,Kotlin,Inheritance,Overriding,Delegation,我有一个java类: class A { public void foo() {...} } 然后在Kotlin,一个类: class B: A() {} 我从B扩展,但是使用一个带有委托的接口来覆盖A.foo,即 接口IFoo{ fun foo() } 类FooImpl:IFoo{ 重写fun foo(){…} } 问题是,我把它当作 类C:B(),IFoo by FooImpl(){} 但是我得到了一个错误,foo()隐藏了超类型重写。。。请明确指定正确的覆盖。我在哪里可以这
class A {
public void foo() {...}
}
然后在Kotlin,一个类:
class B: A() {}
我从B扩展,但是使用一个带有委托的接口来覆盖A.foo
,即
接口IFoo{
fun foo()
}
类FooImpl:IFoo{
重写fun foo(){…}
}
问题是,我把它当作
类C:B(),IFoo by FooImpl(){}
但是我得到了一个错误,
foo()隐藏了超类型重写。。。请明确指定正确的覆盖
。我在哪里可以这样做?假设不允许修改Java类,最好使用composition
class A {
fun foo() {
println("A")
}
}
open class B (val a:A): IFoo {
override fun foo(){
a.foo()
}
}
interface IFoo {
fun foo()
}
class FooImpl: IFoo {
override fun foo() { println("B") }
}
class C(): IFoo by B(A()) {} // A
//class C(): IFoo by FooImpl() {} // B
fun main(){
val c = C()
c.foo()
}
Kotlin不支持委托重写它所使用的类的函数。委托完全不知道使用它的类。即使使用它的类重写了它的一个方法,如果委托的一个方法调用了被重写的方法,它也会调用自己的实现,而不是重写。我做到了这一点:-同样的事情,但基类是一个kotlin基类(我在那里做了什么不同的事情吗?)哦,也许它可以与kotlin基类一起工作。我没有试过。