gpt4 book ai didi

kotlin - 扩展函数是特定类的成员函数吗?

转载 作者:行者123 更新时间:2023-12-02 13:22:40 25 4
gpt4 key购买 nike

这里给了两个类A类和B类。A类有一个扩展函数作为sub(),派生类B也有一个同名函数sub()。如果扩展函数是A类的成员函数,那么为什么不能可以通过 super 关键字访问????

open class A(var s : Int){
var a : Int = 5
var b : Int = 4
var c : Int = 0
constructor() : this(7) {
//println("class A constructor has been called !!!")
println("primary constructor value is $s")
}
fun add(h:Int) {
c = a.plus(b)
println("h is for class A $h")
}
fun dis(){
println("sum of a & b is $c")

}
}
fun A.sub(){

println("sub of class A is ${a.minus(b)}")

}
class B: A{

constructor(){
println("primary constructor for class B")

}
fun sub(){
super.sub();
println("sub of class B is ${a.minus(b)}")

}

}
fun main(args:Array<String>){
var b = B()
b.add(2)
b.dis()
b.sub()
}

最佳答案

扩展函数不是类的成员。它们本质上是静态方法,在 Kotlin 中键入它们时可以方便地显示为成员。

您无法访问接收者对象的任何私有(private)成员:

class MyClass(private val b : Int) { }

fun MyClass.extFun() = b // Cannot access 'b': it is private in 'MyClass'

从 Java 调用它时,语法如下:
MyClassKt.extFun(myClass);  // if extension is in file MyClass.kt

关于kotlin - 扩展函数是特定类的成员函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51214561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com