Sobes.tech
Junior — Middle

Jak Kotlin określa w czasie wykonywania, do której klasy przypisana jest funkcja rozszerzająca?

sobes.tech AI

Odpowiedź od AI

Funkcje rozszerzające w Kotlinie są statyczne. Oznacza to, że podczas wykonywania określana jest klasa obiektu, na który wywoływana jest funkcja, na podstawie statycznego typu zmiennej, a nie rzeczywistego typu obiektu. Innymi słowy, funkcja rozszerzająca nie jest wirtualna i nie może być nadpisana.

Przykład:

open class Base
class Derived : Base()

fun Base.foo() = "Base"
fun Derived.foo() = "Derived"

fun main() {
    val b: Base = Derived()
    println(b.foo()) // Wypisze "Base", mimo że obiekt jest typu Derived
}

Tutaj wywołanie funkcji rozszerzającej jest określane przez typ zmiennej b (Base), a nie przez rzeczywisty typ obiektu (Derived).