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