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) менен эмес.