English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا المقال، ستتعلم باستخدام الأمثلة استخدام الفئات المدمجة والفئات الداخلية.
مثل Java، يسمح Kotlin لك بإنشاء فئة داخل فئة أخرى تُدعى فئة مدمجة.
class Outer { ... .. ... class Nested { ... .. ... } }
بسبب أن الفئة المدمجة هي عضو خارجي للفئة المحاطة (Outer)، يمكنك استخدام رمز النقطة . للاستفادة من الفئة المدمجة وأعضائها.
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 الوصول إلى نماذج الفئة الخارجية. على سبيل المثال:
class Outer { val foo = "خارج الفئة المدمجة." class Nested { //خطأ! لا يمكن الوصول إلى أعضاء الفئة الخارجية. fun callMe() = foo } } fun main(args: Array<String>) { val outer = Outer() println(outer.Nested().callMe()) }
تعليمات البرمجة أعلاه لا يمكن تجميعها لأننا نحاول الوصول إلى خاصية foo الخاصة بالفئة الخارجية من داخل الفئة المدمجة.
لحل هذه المشكلة، تحتاج إلى استخدام علامة inner لإنشاء فئة داخلية. تحمل الفئة الداخلية مرجعًا إلى الفئة الخارجية وتستطيع الوصول إلى أعضاء الفئة الخارجية.
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()}") }
عند تشغيل البرنامج، الناتج سيكون:
استخدام الهدف الخارجي: في الخارج من الصنف المدمج. استخدام الهدف الداخلي: في الخارج من الصنف المدمج.