Kotlin 我可以用另一个函数覆盖一个函数吗?(如覆盖)

Kotlin 我可以用另一个函数覆盖一个函数吗?(如覆盖),kotlin,Kotlin,我是科特林的初学者。 我不确定我尝试的方式是否正确。 现在我想覆盖并捕获变量 假设这是一个可以重写的SOMETHING类的方法: fun whoAreYou() {} 这是我的职责: fun thisFuntionsIs(): ()->Unit { var i = 0 println("It's parent Function!") return { println("It's child Function! ${i++}") } } 现在我尝试用新函数覆盖现有

我是科特林的初学者。 我不确定我尝试的方式是否正确。 现在我想覆盖并捕获变量

假设这是一个可以重写的
SOMETHING
类的方法:

fun whoAreYou() {}
这是我的职责:

fun thisFuntionsIs(): ()->Unit {
    var i = 0
    println("It's parent Function!")
    return { println("It's child Function! ${i++}") }
}
现在我尝试用新函数覆盖现有函数:

fun whoAreYou() = thisFuntionsIs() // Suppose used the override keyword
现在,当我运行这个函数时,它每次都会打印出一条“parent”消息

这不是我想要的。☹

如果
whoAreYou
是一个属性,而不是一个方法,我希望它能正常工作

class SOMETHING {
    var whoAreYou = ()->{} // If it was a property...
    // fun whoAreYou() {} // But the current situation is
}
SOMETHING.whoAreYou = thisFuntionsIs()
SOMETHING.whoAreYou() // Yea~ I wanted that

有解决办法吗?还是我完全错了?请帮助我。

要重写,需要打开父类和函数
,然后在扩展类中重写函数:

open class Parent {
    protected var counter = 0;
    open fun whoAreYou() = "It's parent Function!"
}

class Child : Parent() {
    override fun whoAreYou() = "It's child Function! ${counter++}"
}

fun main() {
    val parent: Parent = Parent()
    val child: Parent = Child()

    println(parent.whoAreYou()) // It's parent Function!
    println(child.whoAreYou()) // It's child Function! 0
    println(child.whoAreYou()) // It's child Function! 1
    println(child.whoAreYou()) // It's child Function! 2
}

代码是有效的。也许你只是误解了结果。略加修改的版本:

fun main(args: Array<String>) {
    val x = SOMETHING()
    x.whoAreYou = thisFuntionsIs()
    x.whoAreYou()
    x.whoAreYou()
}

class SOMETHING {
    var whoAreYou = fun() {
        System.out.println("It's parent Function!")
    }
}

fun thisFuntionsIs(): () -> Unit {
    var i = 0
    System.out.println("It's Function!")
    return { System.out.println("It's lambda! ${i++}") }
}
x.whoAreYou=thisFuntionsIs()
意味着调用
thisFuntionsIs
,并且
x.whoAreYou
通过
thisFuntionsIs
分配给匿名函数return

>  It's Function!
>  It's lambda! 0
>  It's lambda! 1