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