Junior — Middle
Как определя Kotlin по време на изпълнение към кой клас се прилага разширяващата функция?
sobes.tech AI
Отговор от AI
Функциите за разширение в Kotlin са статични по природа. Това означава, че по време на изпълнение класът на обекта, към който се извиква функцията, се определя въз основа на статичния тип на променливата, а не на реалния тип на обекта. С други думи, функцията за разширение не е виртуална и не може да бъде презаписана.
Пример:
open class Base
class Derived : Base()
fun Base.foo() = "Base"
fun Derived.foo() = "Derived"
fun main() {
val b: Base = Derived()
println(b.foo()) // Ще изведе "Base", въпреки че обектът е от тип Derived
}
Тук извикването на функцията за разширение се определя от типа на променливата b (Base), а не от реалния тип на обекта (Derived).