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).