Sobes.tech
Junior — Middle

Πώς καθορίζει η Kotlin κατά την εκτέλεση σε ποια κλάση εφαρμόζεται μια λειτουργία επέκτασης;

sobes.tech AI

Απάντηση από 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).