Junior — Middle
Kako Kotlin tokom izvršavanja određuje na koju klasu se primenjuje funkcija proširenja?
sobes.tech АИ
Одговор од АИ
Funkcije proširenja u Kotlinu su statičke po svojoj prirodi. To znači da se tokom izvršavanja određuje klasa objekta na koji se poziva funkcija, na osnovu statičkog tipa promenljive, a ne na osnovu stvarnog tipa objekta. Drugim rečima, funkcija proširenja nije virtuelna i ne može biti prepisana.
Primer:
open class Base
class Derived : Base()
fun Base.foo() = "Base"
fun Derived.foo() = "Derived"
fun main() {
val b: Base = Derived()
println(b.foo()) // Ispisaće "Base", iako je objekat tipa Derived
}
Ovde, poziv funkcije proširenja je određen tipom promenljive b (Base), a ne stvarnim tipom objekta (Derived).