تسلسل المنشئ الضمني والصريح

click fraud protection

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

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

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

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

لاحظ أن:

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

خذ بعين الاعتبار هذا الحيوان الفائق الممتد بواسطة الثدييات:

الفئة الحيوانية {
// البناء
حيوان(){
 System.out.println ("نحن في منشئ الحيوانات Animal class.") ؛
}
}
فئة الثدييات يمتد الحيوان {
//constructor
الحيوان الثديي(){
 System.out.println ("نحن في فئة منشئ الثدييات.")؛
}
}

الآن ، دعنا ننشئ فئة الثدييات:

الطبقة العامة ChainingConstructors {
 /**
*param args
*/
public static void main (String [] args) {
Mammal m = الثدييات الجديدة () ؛
}
}

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

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

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

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

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

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

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

ها هو حيوان السوبر كلاس:

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

إليك فئة فرعية من الثدييات:

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

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

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

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

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

أعدم أولاً.
أعدم الثاني.
أنا أعدم الأخير.

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

instagram story viewer