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