Junior — Middle
Jak při běhu určuje Kotlin, na kterou třídu se vztahuje rozšiřující funkce?
sobes.tech AI
Odpověď od AI
Rozšiřující funkce v Kotlinu jsou statické povahy. To znamená, že při běhu programu je třída objektu, na který je funkce volána, určena na základě statického typu proměnné, nikoli podle skutečného typu objektu. Jinými slovy, rozšiřující funkce není virtuální a nelze ji přepsat.
Příklad:
open class Base
class Derived : Base()
fun Base.foo() = "Base"
fun Derived.foo() = "Derived"
fun main() {
val b: Base = Derived()
println(b.foo()) // Vytiskne "Base", i když je objekt typu Derived
}
Zde je volání rozšiřující funkce určeno typem proměnné b (Base), nikoli skutečným typem objektu (Derived).