Sobes.tech
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)։