Sobes.tech
Junior — Middle

Kotlin işləmə zamanı genişlənmə funksiyasının hansı sinfə tətbiq olunduğunu necə müəyyən edir?

sobes.tech Süni İntellekt

AI-dan cavab

Kotlin-də genişləndirmə funksiyaları təbiətinə görə statikdir. Bu, icra zamanı funksiyanın çağrıldığı obyektin sinfinin, dəyişənin statik növünə əsasən müəyyən olunduğu və obyektin faktiki növünə görə deyil. Başqa sözlə, genişləndirmə funksiyası virtual deyil və üzərinə yazıla bilməz.

Misal:

open class Base
class Derived : Base()

fun Base.foo() = "Base"
fun Derived.foo() = "Derived"

fun main() {
    val b: Base = Derived()
    println(b.foo()) // "Base" çap edir, obyekt Derived olsa da
}

Burada, genişləndirmə funksiyasının çağırışı b dəyişəninin (Base) növü ilə müəyyən edilir və obyektin faktiki növü (Derived) ilə deyil.