مثير للإعجاب

تعلم استخدام هذا () و (السوبر) في Java Constructor Chaining

تعلم استخدام هذا () و (السوبر) في Java Constructor Chaining

تسلسل المنشئ في Java هو فعل منشئ واحد يدعو مُنشئ آخر عبر الميراث. يحدث هذا ضمنيًا عند إنشاء فئة فرعية: مهمتها الأولى هي استدعاء طريقة منشئ الوالدين. لكن يمكن للمبرمجين أيضًا استدعاء مُنشئ آخر باستخدام الكلمات الأساسية بشكل صريحهذه() أوممتاز(). ال هذه() الكلمة الأساسية تدعو منشئ آخر overloaded في نفس الفئة؛ ال ممتاز() الكلمة الأساسية تدعو مُنشئ غير افتراضي في فئة فائقة.

منشئ ضمني تسلسل

يحدث تسلسل المنشئ من خلال استخدام الميراث. تتمثل المهمة الأولى لأسلوب مُنشئ فئة فرعية في استدعاء طريقة مُنشئ الفئة الفائقة. هذا يضمن أن يبدأ إنشاء كائن الفئة الفرعية بتهيئة الفئات الموجودة فوقه في سلسلة الوراثة.

يمكن أن يكون هناك أي عدد من الطبقات في سلسلة الميراث. تستدعي كل طريقة منشئ السلسلة السلسلة حتى يتم الوصول إلى الصف في الجزء العلوي وتهيئته. ثم تتم تهيئة كل فئة لاحقة أدناه حيث تعود السلسلة إلى أسفل الفئة الفرعية الأصلية. وتسمى هذه العملية منشئ التسلسل.

لاحظ أن:

  • هذه الدعوة الضمنية إلى الطبقة العليا هي نفسها كما لو أن الفئة الفرعية قد شملت ممتاز() الكلمة الرئيسية ، أي ممتاز() هو ضمني هنا.
  • إذا لم يتم تضمين مُنشئ no-args في الفصل ، فإن Java تنشئ واحدة من وراء الكواليس وتدعو إليها. هذا يعني أنه إذا أخذ المنشئ الوحيد لديك حجة ، فيجب عليك ذلك صراحة إستخدم هذه() أو ممتاز() الكلمة الأساسية لاستدعاء ذلك (انظر أدناه).

النظر في هذه الفئة الفائقة الحيوان الذي قدمه الثدييات:

فئة الحيوان
// البناء
حيوان(){

System.out.println ("نحن في منشئ Animal's منشئ".))؛
}
}

الطبقة الثدييات يمتد الحيوان {
//البناء
الحيوان الثديي(){

System.out.println ("نحن في مُنشئ Mammal 's class.")؛
}
}

الآن ، دعنا نبدأ في محاكاة فئة الثدييات:

الفئة العامة ChainingConstructors {

 /**
* @ بارام يجادل
*/
ثابت الفراغ الرئيسي العام (سلسلة الحجج) {
الثدييات م = الثدييات الجديدة () ؛
}
}

عند تشغيل البرنامج أعلاه ، تقوم Java بتشغيل اتصال ضمني إلى مُنشئ الحيوانات الفائقة ، ثم إلى مُنشئ الفصل. الناتج ، بالتالي ، سيكون:

نحن في فئة منشئ الحيوان
نحن في منشئ الثدييات

صريح منشئ سلسلة باستخدام هذا () أو super ()

الاستخدام الصريح لل هذه() أو ممتاز() تتيح لك الكلمات الرئيسية الاتصال بمنشئ غير افتراضي.

  • لاستدعاء مُنشئ افتراضي غير تابع لـ args أو مُنشئ مُحمّل بشكل زائد من داخل نفس الفئة ، استخدمهذه() الكلمة.
  • للاتصال بمنشئ فئة فائقة غير افتراضي من فئة فرعية ، استخدم ممتاز() الكلمة. على سبيل المثال ، إذا كانت الفئة الفائقة تحتوي على مُنشئين متعددين ، فقد ترغب الفئة الفرعية دائمًا في استدعاء مُنشئ معين ، وليس الافتراضي.

لاحظ أنه يجب أن تكون المكالمة إلى مُنشئ آخر هي العبارة الأولى في المُنشئ أو أن جافا سوف يلقي خطأً في الترجمة.

فكر في الكود أدناه الذي ترث فيه فئة فرعية جديدة ، كارنيفور ، من فئة الثدييات التي ترث من فئة الحيوان ، ولكل فصل الآن مُنشئ يأخذ حجة.

ها هي الفئة الفائقة الحيوان:

الطبقة العامة الحيوان
اسم السلسلة الخاص
الحيوان العام (اسم السلسلة) / مُنشئ ذو حجة
{
this.name = الاسم ؛
System.out.println ("أنا أعدم أولاً.") ؛
}
}لاحظ أن المنشئ الآن يأخذ اسم من النوع خيط كمعلمة وهذا الجسم من المكالمات الطبقة هذه() على المنشئ. دون الاستخدام الصريح لل هذا الإسم، سيقوم Java بإنشاء مُنشئ بلا وسيطات وسيستدعي ذلك بدلاً من ذلك.

وهنا فئة فرعية الثدييات:

الطبقة العامة الثدييات يمتد الحيوان {
الثدييات العامة (اسم السلسلة)
{
السوبر (اسم)؛
System.out.println ("أنا أعدم ثانية") ؛
}
}

يأخذ مُنشئه أيضًا حجة ويستخدمه السوبر (الاسم) لاستدعاء منشئ معين في فئتها.

وهنا فئة أخرى آكلة اللحوم. هذا يرث من الثدييات:

الطبقة العامة آكلات اللحوم تمتد الثدييات {
آكلات اللحوم العامة (اسم السلسلة)
{
السوبر (اسم)؛
System.out.println ("أنا أعدم الأخير") ؛
}
}

عند التشغيل ، ستتم طباعة كتل التعليمات البرمجية الثلاثة هذه:

أنا أعدم أولاً.
أنا أعدم الثانية.
أنا أعدم الماضي.

إلى خلاصة: عند إنشاء مثيل لفئة Carnivore ، يكون الإجراء الأول لطريقة منشئها هو استدعاء طريقة منشئ الثدييات. وبالمثل ، فإن الإجراء الأول لطريقة منشئ الثدييات هو استدعاء طريقة منشئ الحيوانات. تضمن سلسلة من عمليات استدعاء الأسلوب المُنشئ التأكد من أن مثيل كائن Carnivore قام بتهيئة جميع الفئات في سلسلة الميراث بشكل صحيح.