Sobes.tech
Junior — Middle

Cum determină Kotlin în timpul execuției la ce clasă se aplică o funcție de extensie?

sobes.tech AI

Răspuns de la AI

Funcțiile de extensie în Kotlin sunt de natură statică. Aceasta înseamnă că în timpul execuției, clasa obiectului pe care se apelează funcția este determinată în funcție de tipul static al variabilei, nu de tipul real al obiectului. Cu alte cuvinte, funcția de extensie nu este virtuală și nu poate fi suprascrisă.

Exemplu:

open class Base
class Derived : Base()

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

fun main() {
    val b: Base = Derived()
    println(b.foo()) // Va afișa "Base", chiar dacă obiectul este de tip Derived
}

Aici, apelul funcției de extensie este determinat de tipul variabilei b (Base), și nu de tipul real al obiectului (Derived).