جافا الطبقات الداخلية
1. المعنى
في لغة برمجة Java ، تم تصميم البرامج من الفصول الدراسية. يمكن الإعلان عن الفصول الدراسية أيضًا داخل الفصل ، ونحن نسمي مثل هذا الفصل الداخلي للصف.
2. وظيفة
• تنفيذ تغليف أفضل ، نعلم أن معدلات الوصول للفئات العادية (الفئات غير الداخلية) لا يمكن أن تكون خاصة أو محمية ، في حين أن الفئات الداخلية يمكن. عندما نعلن أن الفئة الداخلية خاصة ، يمكن للطبقة الخارجية فقط الوصول إلى الفئة الداخلية ، مع إخفاء الفئة الداخلية بشكل جيد.
• يمكن أن ترث الطبقات الداخلية (تمتد) أو تنفيذ (تنفيذ) فئات أو واجهات أخرى دون أن تتأثر بالفئات الخارجية.
• يمكن للفصول الداخلية الوصول مباشرة إلى الحقول وطرق الفئات الخارجية ، حتى لو تم تعديلها مع القطاع الخاص. على العكس من ذلك ، لا يمكن للفصول الخارجية الوصول مباشرة إلى أعضاء الفصول الداخلية.
3. مبدأ
الفصول الداخلية هي مفهوم وقت الترجمة. بعد التجميع ، سيتم إنشاء ملفين فئة مستقلين ، على النحو التالي:
الفئة العامة الخارجية {private string outername = "Outer" ؛ الفئة الداخلية {private string innername = "inner" ؛ }}الملف المترجم كما يلي:
بعد التجميع ، يتم إعادة تسمية Outer.inner إلى $ $ $ ، ويتم استبدال الفترة (.) بعلامة الدولار ($).
رابعا. تصنيف
يمكن تقسيم فصول Java الداخلية إلى فصول داخلية للأعضاء ، والطبقات الداخلية المحلية ، والطبقات الداخلية المجهولة ، والفصول الداخلية الثابتة.
1) الفئة الداخلية للأعضاء
يمكن اعتبار الفئة الداخلية عضوًا عضوًا في فصل خارجي. لا يمكن إعلان العضو الثابت في فصل داخلي عضو ، لكن المجال النهائي الثابت هو استثناء. نحن نعلم أنه عند تحميل الفصل ، سيتم تهيئة الأعضاء الثابتة أولاً. إذا كان لدى الفئة الداخلية للعضو أعضاء ثابتة ، فسيتم إنشاء الفصل الداخلي قبل الفصل الخارجي. يخدم الفئة الداخلية الفئة الخارجية ، وقد تكون الفئة الداخلية التي تم إنشاؤها قبل الفئة الخارجية خارج نطاق السيطرة. عند إنشاء فئة داخلية عضو ، ستعقد الفئة الداخلية العضو إشارة إلى الكائن الحالي للفئة الخارجية ، بحيث يمكن الوصول إلى أعضاء الفئة الخارجية مباشرة في الفئة الداخلية للأعضاء ، حتى لو تم تعديل القطاع الخاص.
استيراد java.lang.system.out الفئة العامة الخارجية {private string outername = "Outer" ؛ // لا يمكن للفئة الخارجية الوصول مباشرة إلى أعضاء الفئة الداخلية ، وتحتاج إلى إنشاء مثيل للكائن الداخلي الداخلي الداخلي الداخلي = new inner () ؛ الفئة العامة الداخلية {private string innername = "inner" ؛ show public void () {out.println (outername) ؛ // يمكنك الوصول مباشرة إلى أعضاء الفئة الخارجية}} public void show () {out.println (inner.innername) ؛ inner.show () ؛ } public static void main (string [] args) {Outer Outer = new Outer () ؛ Outer.show () ؛ // instantiate the outer. inner inner inner = outer.new inner () ؛ inner.show () ؛ }}نتائج التشغيل:
داخلي
خارجي
خارجي
تتكون الإشارة إلى كائن الفئة الخارجية للفئة الداخلية العضو من اسم الفئة الخارجية قبل ذلك. هذا النموذج يسمى
محدودة ، out.println (outername) و out.println (Outer.This.outername) مكافئة.
2) الطبقات الداخلية المحلية
إن استخدام الطبقات الداخلية المحلية هو نفسه في الأساس من الفصول الداخلية الأعضاء. يتم تعريف الفئات الداخلية المحلية في طرق الفئة الخارجية ، تمامًا مثل المتغيرات المحلية ، وليست أعضاء في الفئة الخارجية. لا يمكن الوصول إلى الفصل الداخلي المحلي خارج الطريقة ، ولكن يمكن إرجاع مثيلاته من الطريقة وستبقى الحالات حتى لا يتم الرجوع إليها. يمكن للفئات الداخلية المحلية أيضًا الوصول إلى المتغيرات المحلية ، ومعلمات الطريقة ، وما إلى ذلك من الطريقة التي توجد بها. القيد هو أنه لا يمكن الوصول إلى المتغيرات المحلية أو معلمات الطريقة إلا عند إعلانها على أنها نهائية.
استيراد java.lang.system.out الفئة العامة الخارجية {private string outername = "Outer" ؛ Public Void Show (Final String Str) {// معلمات الأسلوب هي فئة النوع النهائي {public void print () {out.println (outername+str) ؛ }} inner inner = new Inner () ؛ inner.print () ؛ } public static void main (string [] args) {Outer Outer = new Outer () ؛ Outer.show (": lalala") ؛ }}نتائج التشغيل:
الخارجي: لالالا
3) فئة داخلية مجهولة المصدر
يمكنك أن تتخيل فصول داخلية مجهولة كطبقات داخلية محلية بدون أسماء الفصل. الطبقات الداخلية المجهولة لها الخصائص التالية:
1. لا تحتوي الفصول الداخلية المجهولة على أسماء فئة ، لذلك لا يمكن الإعلان عن المُنشئ.
2. يجب أن ترث الطبقات الداخلية المجهولة أو تنفيذ واجهة. النوع المعين إلى الجديد هو supertype من فئة مجهولة. لا يمكن أن تكون الطبقات المجهولة قد تم توسيعها أو تنفذ الجمل المعروضة ، ولا يمكن أن يكون لها أي معدلات.
3. فئات داخلية مجهولة هي نفس الفصول الداخلية للأعضاء والفصول الداخلية المحلية ، ولا يمكن الإعلان عن الأعضاء الثابتة.
استيراد java.lang.system.out الفئة العامة الخارجية {private string outername = "Outer" ؛ show public void show (Final String str) {new Inner () {// تنفيذ واجهة داخلية public print () {out.println (outername+str) ؛ } }.مطبعة()؛ } public static void main (string [] args) {Outer Outer = new Outer () ؛ Outer.show (": lalala") ؛ }} واجهة Inner {void print () ؛ }نتائج التشغيل:
الخارجي: لالالا
4) فئة داخلية ثابتة
تتطلب الطبقة الداخلية الثابتة ، والتي تسمى أيضًا الفصول المتداخلة في بعض الكتب ، استخدام المعدلات الثابتة عند إعلانها. الطبقة الداخلية الثابتة تختلف عن الفصول الداخلية الثلاثة الأولى. لا يحتفظ الفئة الداخلية الثابتة بالمراجع إلى الكائن الحالي للفئة الخارجية ، لذلك لا يمكن الوصول إلى الأعضاء غير القتليين في الفئة الخارجية في الفئة الداخلية الثابتة. يمكن القول أن الطبقة الداخلية الثابتة لا تعتمد على الطبقة الخارجية.
استيراد java.lang.system.out الفئة العامة الخارجية {private string outername = "Outer" ؛ int static int id = 123 ؛ Inner Inner = New Inner () ؛ الفئة الثابتة العامة {public void print1 () {//out.println(outername) ؛ لا يمكن الوصول إلى العضو غير الأساسي للفئة الخارجية. } public static void print2 () {out.println (id) ؛ }} public void show () {inner.print1 () ؛ } public static void main (string [] args) {Outer Outer = new Outer () ؛ Outer.show () ؛ outer.inner.print2 () ؛ // تدور حول الفئة الداخلية الثابتة من خلال اسم الفصل}}