Junior — Middle
Come determina Kotlin in fase di esecuzione a quale classe si applica una funzione di estensione?
sobes.tech AI
Risposta dell'AI
Le funzioni di estensione in Kotlin sono di natura statica. Ciò significa che durante l'esecuzione viene determinata la classe dell'oggetto su cui viene chiamata la funzione, in base al tipo statico della variabile, e non al tipo reale dell'oggetto. In altre parole, la funzione di estensione non è virtuale e non può essere sovrascritta.
Esempio:
open class Base
class Derived : Base()
fun Base.foo() = "Base"
fun Derived.foo() = "Derived"
fun main() {
val b: Base = Derived()
println(b.foo()) // Stampa "Base", anche se l'oggetto è di tipo Derived
}
Qui, la chiamata alla funzione di estensione è determinata dal tipo della variabile b (Base), e non dal tipo reale dell'oggetto (Derived).