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