Junior — Middle
Ինչպե՞ս է Kotlin-ը որոշում, թե որ դասին է կիրառվում ընդլայնման ֆունկցիան գործարկման ժամանակ։
sobes.tech AI
Պատասխան AI-ից
Kotlin- ում ընդլայնման ֆունկցիաները բնույթով ստատիկ են: Դա նշանակում է, որ գործարկման ժամանակ որոշվում է օբյեկտի դասը, որի վրա ֆունկցիան կանչվում է, ըստ փոփոխականի ստատիկ տիպի, ոչ թե իրական տիպի։ Այլ կերպ ասած, ընդլայնման ֆունկցիան վիրտուալ չէ և չի կարող վերագրել։
Օրինակ՝
open class Base
class Derived : Base()
fun Base.foo() = "Base"
fun Derived.foo() = "Derived"
fun main() {
val b: Base = Derived()
println(b.foo()) // Տպում է "Base", չնայած օբյեկտը Derived է
}
Այստեղ ընդլայնման ֆունկցիայի կանչը որոշվում է փոփոխականի b (Base) տիպով, ոչ թե իրական օբյեկտի տիպով (Derived)։