Sobes.tech
Back to questions
Junior — Middle
66

Каким образом Kotlin определяет, к какому классу применяется расширяющая функция во время выполнения?

Companies where asked
Viasat tech

Answer from AI

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