使用super在kotlin中扩展功能

har*_*sai 2 kotlin kotlin-extension

如何使用super关键字在派生类中调用基类的扩展函数?

我尝试使用super打电话,但是没有用。

 open class abc {
     open fun aa() {
         println("function in abc")
     }
 }
 fun abc.sum() {
     println("extension function")
 }
 class ab: abc() {

     override fun aa() {
         super.aa()
         println("functon in ab")
     }
     fun sum() {
         super.sum()
         println("sum function")
     }
 }
 fun main(args: Array < String > ) {
     var aa: ab = ab()
     aa.aa()
     aa.aa()
     aa.sum()
 }
Run Code Online (Sandbox Code Playgroud)

这是16号数字错误,我无法调用扩展功能。

小智 6

这样可以:

(this as abc).sum()
Run Code Online (Sandbox Code Playgroud)

super 不起作用,因为扩展功能不是派生类中要重写的基类的成员。


Bri*_*shi 5

当您从类中创建扩展时,它不再是该类的成员。您可以拨打电话,super.aa()因为它是班级成员abc

为了使用该方法,您必须按以下方式调用它。

open class abc {
    open fun aa() {
        println("function in abc")
    }
}
fun abc.sum() {
    println("extension function")
}
class ab: abc() {

    override fun aa() {
        super.aa()
        println("functon in ab")
    }
    fun sum() {
        (this as abc).sum()
        println("sum function")
    }
}
fun main(args: Array < String > ) {
    var aa: ab = ab()
    aa.aa()
    aa.aa()
    aa.sum()
}
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息,请参阅此链接