Junior — Middle
Kā Kotlin noteikt izpildes laikā, kurai klasei piemērojas paplašināšanas funkcija?
sobes.tech AI
Atbilde no AI
Kotlin paplašināšanas funkcijas ir pēc savas dabas statiskas. Tas nozīmē, ka izpildes laikā tiek noteikta objekta klase, uz kuru tiek izsaukta funkcija, balstoties uz statisko mainīgā tipu, nevis uz faktiskā objekta tipu. Citiem vārdiem sakot, paplašināšanas funkcija nav virtuāla un to nevar pārrakstīt.
Piemērs:
open class Base
class Derived : Base()
fun Base.foo() = "Base"
fun Derived.foo() = "Derived"
fun main() {
val b: Base = Derived()
println(b.foo()) // Izvadīs "Base", neskatoties uz to, ka objekts ir Derived
}
Šeit paplašināšanas funkcijas izsaukums ir atkarīgs no mainīgā b (Base) tipa, nevis no faktiskā objekta tipa (Derived).