Sobes.tech
Junior — Middle

Ako počas behu určuje Kotlin, na ktorú triedu sa vzťahuje rozširujúca funkcia?

sobes.tech AI

Odpoveď od AI

Rozširujúce funkcie v Kotlin sú statické povahy. To znamená, že počas behu sa určuje trieda objektu, na ktorý sa volá funkcia, na základe statického typu premennej, nie na základe skutočného typu objektu. Inými slovami, rozširujúca funkcia nie je virtuálna a nemôže byť prepísaná.

Príklad:

open class Base
class Derived : Base()

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

fun main() {
    val b: Base = Derived()
    println(b.foo()) // Vypíše "Base", aj keď je objekt typu Derived
}

Tu je volanie rozširujúcej funkcie určené typom premennej b (Base), nie skutočným typom objektu (Derived).