Sobes.tech
Junior — Middle

Kuidas määrab Kotlin täitmise ajal, millisele klassile rakendub laienduste funktsioon?

sobes.tech AI

Vastus AI-lt

Kotlin'i laiendamise funktsioonid on oma olemuselt staatilised. See tähendab, et töö ajal määratakse objekti klass, millele funktsioon on kutsutud, põhinedes staatilisel muutuja tüübile, mitte objekti tegelikule tüübile. Teisisõnu, laiendamise funktsioon ei ole virtuaalne ja seda ei saa üle kirjutada.

Näide:

open class Base
class Derived : Base()

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

fun main() {
    val b: Base = Derived()
    println(b.foo()) // Kuvab "Base", hoolimata sellest, et objekt on tüüpi Derived
}

Siin määrab laiendamise funktsiooni väljakutse muutuja b (Base) tüübi, mitte tegeliku objekti tüübi (Derived).