Function kotlin中的覆盖方法和一般方法有什么区别?

Function kotlin中的覆盖方法和一般方法有什么区别?,function,kotlin,Function,Kotlin,我想使用start method=this::showLoadingDialog, 但是得到一个编译错误!该方法不是重写***的子类型 为什么??怎么办?这是不正确的,因为start不是一个变量,而是一个函数 val showMethod:(String) -> Unit = this::showLoadingDialog override fun start(msg: String) = showMethod 相当于 override fun start(msg: String) =

我想使用start method=this::showLoadingDialog, 但是得到一个编译错误!该方法不是重写***的子类型


为什么??怎么办?

这是不正确的,因为
start
不是一个变量,而是一个函数

val showMethod:(String) -> Unit = this::showLoadingDialog
override fun start(msg: String) = showMethod
相当于

override fun start(msg: String) = showMethod
override fun start(msg: String) {
    return showMethod(msg)
}
这是不正确的
start
应返回
Unit
而不是
(字符串)->Unit

你想做的是

override fun start(msg: String) {
    return showMethod
}
相当于

override fun start(msg: String) = showMethod
override fun start(msg: String) {
    return showMethod(msg)
}

这是不正确的,因为
start
不是一个变量,而是一个函数

val showMethod:(String) -> Unit = this::showLoadingDialog
override fun start(msg: String) = showMethod
相当于

override fun start(msg: String) = showMethod
override fun start(msg: String) {
    return showMethod(msg)
}
这是不正确的
start
应返回
Unit
而不是
(字符串)->Unit

你想做的是

override fun start(msg: String) {
    return showMethod
}
相当于

override fun start(msg: String) = showMethod
override fun start(msg: String) {
    return showMethod(msg)
}

FunStart2(msg:String)=this::showLoadingDialog,我写这个方法,编译ok!没有
覆盖
@这是因为
start
要求返回类型为
Unit
,如果您覆盖它,则无法更改<代码>开始2不是覆盖功能。如果将鼠标悬停在
start2
上,您可以看到返回类型为
KFunction0
,因为即使您没有编写它,Kotlin也可以为您检测该类型。如果您声明
fun start2(msg:String):Unit=this::showLoadingDialog
,则会出现错误。谢谢!我知道!否
覆盖
kotlin使用类型推断确定结果类型@几乎在每种语言中,如果重写一个函数,它需要有相同的参数和返回相同的类型。此外,如果它解决了您的问题,请将此标记为答案。:)FunStart2(msg:String)=this::showLoadingDialog,我写这个方法,编译ok!没有
覆盖
@这是因为
start
要求返回类型为
Unit
,如果您覆盖它,则无法更改<代码>开始2不是覆盖功能。如果将鼠标悬停在
start2
上,您可以看到返回类型为
KFunction0
,因为即使您没有编写它,Kotlin也可以为您检测该类型。如果您声明
fun start2(msg:String):Unit=this::showLoadingDialog
,则会出现错误。谢谢!我知道!否
覆盖
kotlin使用类型推断确定结果类型@几乎在每种语言中,如果重写一个函数,它需要有相同的参数和返回相同的类型。此外,如果它解决了您的问题,请将此标记为答案。:)