使用 super 在 kotlin 中扩展函数
extension function in a kotlin using super
如何使用 super 关键字在派生 class 中调用基 class 的扩展函数?
我尝试使用 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()
}
这里是第16行错误,无法调用扩展函数
这种命名空间冲突是扩展方法的普遍缺陷。扩展方法本质上是静态的并且 do not mix well with inheritance.
在您的特定情况下,函数 sum
似乎不需要成为扩展方法。如果将其更改为 open
虚拟方法,您将能够更好地设计子类中的继承和潜在重写。
这样做:
(this as abc).sum()
super
不起作用,因为扩展函数不是基 class 的成员,将在派生 classes.
中被覆盖
当您从 class 创建扩展时,它不再是 class 的成员。您可以调用 super.aa()
,因为它是 abc
class.
的成员
为了使用该方法,您必须按以下方式调用它。
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()
}
有关更多信息,请参阅此 link
如何使用 super 关键字在派生 class 中调用基 class 的扩展函数?
我尝试使用 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()
}
这里是第16行错误,无法调用扩展函数
这种命名空间冲突是扩展方法的普遍缺陷。扩展方法本质上是静态的并且 do not mix well with inheritance.
在您的特定情况下,函数 sum
似乎不需要成为扩展方法。如果将其更改为 open
虚拟方法,您将能够更好地设计子类中的继承和潜在重写。
这样做:
(this as abc).sum()
super
不起作用,因为扩展函数不是基 class 的成员,将在派生 classes.
当您从 class 创建扩展时,它不再是 class 的成员。您可以调用 super.aa()
,因为它是 abc
class.
为了使用该方法,您必须按以下方式调用它。
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()
}
有关更多信息,请参阅此 link