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