Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class 如何在kotlin中显式指定适当的重写_Class_Kotlin_Inheritance_Overriding_Delegation - Fatal编程技术网

Class 如何在kotlin中显式指定适当的重写

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()隐藏了超类型重写。。。请明确指定正确的覆盖。我在哪里可以这

我有一个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()隐藏了超类型重写。。。请明确指定正确的覆盖
。我在哪里可以这样做?

假设不允许修改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基类一起工作。我没有试过。