Kotlin 扩展函数是特定类的成员函数吗?
这里给出了两个类A和B。类A有一个扩展函数作为sub(),派生类B也有一个同名函数sub()。如果扩展函数是类A的成员函数,那么为什么不能通过super关键字访问它Kotlin 扩展函数是特定类的成员函数吗?,kotlin,Kotlin,这里给出了两个类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 ca
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()
}
开放类A(变量s:Int){
变量a:Int=5
变量b:Int=4
变量c:Int=0
构造函数():这(7){
//println(“已调用A类构造函数!!!”)
println(“主构造函数值为$s”)
}
乐趣添加(h:Int){
c=a加(b)
println(“h代表A类$h”)
}
有趣的事(){
println(“a&b总额为$c”)
}
}
乐趣A.sub(){
println(“类A的子类是${A.减(b)}”)
}
B类:A{
构造函数(){
println(“B类的主构造函数”)
}
趣味小组(){
super.sub();
println(“B类的子类是${a.减(B)}”)
}
}
趣味主线(args:Array){
var b=b()
b、 加(2)
b、 dis()
b、 分()
}
扩展函数不是类的成员。它们本质上是静态方法,在Kotlin中键入时可以方便地显示为成员
您无法访问接收方对象的任何私有成员:
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
扩展函数是一个成员函数,但我不知道为什么我们不能用super关键字来调用它,但我们有另一种方法来像super一样调用它。。因此,修改了您的代码,如下所示
fun A.sub(){
println("sub of class A is ${a.minus(b)}")
}
class B: A{
constructor(){
println("primary constructor for class B")
}
fun sub(){
(this as A).sub()
println("sub of class B is ${a.minus(b)}")
}
}
不,扩展函数不是类a的成员函数。这可以帮助你:也可以看到这个@yole..我知道它可能是真的或不是,但我需要理由。。根据via超级关键字,它不可访问,然后证明它不是成员函数。谢谢兄弟。。。它的作品!!也许它是专门为扩展功能而添加的。。!!扩展函数不是该类的成员,这就是为什么不能重写它们或使用super,这就是为什么使用类型转换。另外,请看一下[kotlin中的扩展函数使用super]()@mTak。。我得到了答案。。这是一种静态方法吗!?不,它不是静止的,也不是静止的。从文档中可以看出:“Kotlin,…,提供了用新功能扩展类的能力,而无需从类继承或使用任何类型的设计模式,如Decorator。”