Junior — Middle
Hogyan határozza meg a Kotlin futás közben, hogy melyik osztályhoz tartozik egy kiterjesztő függvény?
sobes.tech MI
Válasz az MI-től
A Kotlinban a kiterjesztő függvények statikusak. Ez azt jelenti, hogy futás közben a függvényt meghívó objektum osztályát a változó statikus típusa alapján határozzuk meg, nem pedig az objektum valódi típusát. Más szóval, a kiterjesztő függvény nem virtuális, és nem írható felül.
Példa:
open class Base
class Derived : Base()
fun Base.foo() = "Base"
fun Derived.foo() = "Derived"
fun main() {
val b: Base = Derived()
println(b.foo()) // "Base"-t ír ki, annak ellenére, hogy az objektum Derived típusú
}
Itt a kiterjesztő függvény hívása a b változó (Base) típusától függ, nem pedig az objektum tényleges típusától (Derived).