Назад к вопросам
Junior — Middle
67
Каким образом Kotlin определяет, к какому классу применяется расширяющая функция во время выполнения?
Компании, где спрашивали
Viasat tech
Ответ от нейросети
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).