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