Sobes.tech
Junior — Middle

Kaip Kotlin nustato vykdymo metu, kuriai klasei taikoma išplėtimo funkcija?

sobes.tech AI

Atsakymas iš AI

Kotlin'e išplėtimo funkcijos yra statinės prigimties. Tai reiškia, kad vykdymo metu nustatoma objekto klasė, į kurią kviečiama funkcija, remiantis statiniu kintamojo tipu, o ne tikruoju objekto tipu. Kitaip tariant, išplėtimo funkcija nėra virtuali ir jos negalima perrašyti.

Pavyzdys:

open class Base
class Derived : Base()

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

fun main() {
    val b: Base = Derived()
    println(b.foo()) // Išves "Base", nors objektas yra Derived
}

Čia iškvietimas išplėtimo funkcijos yra nustatomas pagal kintamojo b (Base) tipą, o ne pagal tikrąjį objekto tipą (Derived).