English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل Kotlin الأساسي

تحكم Kotlin في التدفق

الوظائف في Kotlin

السلاسل في Kotlin

Kotlin موجهة الأحداث (OOP)

التصنيفات المدمجة والتصنيفات الداخلية في Kotlin

في هذا المقال، ستتعلم باستخدام الأمثلة استخدام الفئات المدمجة والفئات الداخلية.

الفئات المدمجة في Kotlin

مثل Java، يسمح Kotlin لك بإنشاء فئة داخل فئة أخرى تُدعى فئة مدمجة.

class Outer {
    ... .. ...
    class Nested {
        ... .. ...
    }
}

بسبب أن الفئة المدمجة هي عضو خارجي للفئة المحاطة (Outer)، يمكنك استخدام رمز النقطة . للاستفادة من الفئة المدمجة وأعضائها.

مثال: استخدام الفئات المدمجة في Kotlin

class Outer {
    val a = "في الخارج من الصنف المدمج."
    class Nested {
        val b = "داخل الفئة المدمجة."
        fun callMe() = "إجراء مكالمة دالة من داخل الفئة المدمجة."
    }
}
fun main(args: Array<String>) {
    //وصول إلى أعضاء الفئة المدمجة
    println(Outer.Nested().b)
    //إنشاء نموذج للفئة المدمجة
    val nested = Outer.Nested()
    println(nested.callMe())
}

عند تشغيل البرنامج، الناتج سيكون:

في داخل الفئة المدمجة.
إجراء مكالمة دالة من داخل الفئة المدمجة.

للمستخدمين في Java

تشبه الفئات المدمجة في Kotlin الفئات المدمجة الثابتة في Java.

في Java، عندما تقوم بإنشاء فئة داخل فئة أخرى، يصبح ذلك فئة داخلية افتراضية. ولكن في Kotlin، تحتاج إلى استخدام ميزة修饰ر inner لإنشاء فئة داخلية، وسنناقش ذلك أدناه.

الفئات الداخلية في Kotlin

لا يمكن للفئات المدمجة في Kotlin الوصول إلى نماذج الفئة الخارجية. على سبيل المثال:

class Outer {
    val foo = "خارج الفئة المدمجة."
    class Nested {
        //خطأ! لا يمكن الوصول إلى أعضاء الفئة الخارجية.
        fun callMe() = foo
    }
}
fun main(args: Array<String>) {
    val outer = Outer()
    println(outer.Nested().callMe())
}

تعليمات البرمجة أعلاه لا يمكن تجميعها لأننا نحاول الوصول إلى خاصية foo الخاصة بالفئة الخارجية من داخل الفئة المدمجة.

لحل هذه المشكلة، تحتاج إلى استخدام علامة inner لإنشاء فئة داخلية. تحمل الفئة الداخلية مرجعًا إلى الفئة الخارجية وتستطيع الوصول إلى أعضاء الفئة الخارجية.

مثال: استخدام الفئات الداخلية في Kotlin

class Outer {
    val a = "في الخارج من الصنف المدمج."
    inner class Inner {
        fun callMe() = a
    }
}
fun main(args: Array<String>) {
    val outer = Outer()
    println("استخدام الهدف الخارجي: ${outer.Inner().callMe()}")
    val inner = Outer().Inner()
    println("استخدام الهدف الداخلي: ${inner.callMe()}")
}

عند تشغيل البرنامج، الناتج سيكون:

استخدام الهدف الخارجي: في الخارج من الصنف المدمج.
استخدام الهدف الداخلي: في الخارج من الصنف المدمج.