في Java، أثناء عملية إنشاء فئة فرعية، يجب استدعاء مُنشئ الفئة الأصلية، وذلك لأنه عند وجود علاقة وراثة، يجب أن ترث الفئة الفرعية محتويات الفئة الأصلية.
الجواب هو كما يلي:
عند إنشاء كائن فئة فرعية جديد، يجب عليك أولاً إنشاء كائن جديد للفئة الأصلية، ويقع كائن الفئة الأصلية هذا داخل كائن الفئة الفرعية الوضع الحقيقي في الذاكرة عندما تكون طريقة البناء كائنًا جديدًا، يجب أن يتم استدعاؤها، وهذه قاعدة إذا كنت تريد تجديد كائن الفئة الأصل، فيجب عليك استدعاء طريقة البناء الخاصة به:
القاعدة الأولى: أثناء عملية بناء فئة فرعية، يجب استدعاء طريقة بناء الفئة الأصلية. بالنسبة للفصل، إذا لم نكتب مُنشئًا، فسيساعدنا المترجم في إضافة مُنشئ افتراضي، ما يسمى بالمُنشئ الافتراضي هو مُنشئ بدون معلمات، ولكن إذا كتبت المُنشئ بنفسك، فلن يكون المترجم كذلك. تمت إضافته لك، لذلك في بعض الأحيان عند إنشاء كائن فئة فرعية جديد، يجب استدعاء مُنشئ الفئة الفرعية، ولكن في مُنشئ الفئة الفرعية، لا نستدعي مُنشئ الفئة الأساسية بشكل صريح، أي أنه لا توجد كتابة ، مثل: super(); لم تتم كتابته بهذه الطريقة، ولكنه سيستدعي المُنشئ بدون معلمات الفئة الأصلية. إذا لم يكن هناك مُنشئ بدون معلمات في الفئة الأصلية، فسيحدث خطأ.
القاعدة الثانية: إذا لم يكن هناك استدعاء صريح لمنشئ الفئة الأساسية في مُنشئ الفئة الفرعية، فسيقوم النظام افتراضيًا باستدعاء مُنشئ الفئة الأساسية بدون معلمات. ملاحظة: إذا لم يكن هناك استدعاء صريح لمنشئ الفئة الأساسية في منشئ الفئة الفرعية، ولا يوجد مُنشئ افتراضي بدون معلمات في الفئة الأساسية، يحدث خطأ في الترجمة، لذلك نحتاج عادةً إلى عرض: super (قائمة المعلمات) لاستدعاء مُنشئ الفئة الأصلية باستخدام المعلمات.
// إذا قمت بتحديد مُنشئ جديد
الحيوان العام (اسم السلسلة) {
this.name = name;
}
}
الكلب العام يمتد الحيوان{
// في هذا الوقت، يجب عليك استدعاء مُنشئ الفئة الأصل بشكل صريح، لأن الفئة الفرعية تستدعي الفئة الأصلية بشكل افتراضي.
// لا يوجد مُنشئ معلمة Animal()
الكلب العام (){
super("puppy"); // عرض طريقة المنشئ ذات المعلمات لاستدعاء الفئة الأصلية
.... // معالجة طريقة البناء للفئات الفرعية
}
}
// بالطبع، إذا كتبت بشكل صريح المُنشئ بدون معلمات في الفئة الأصل، على سبيل المثال:
فئة الحيوان{
اسم سلسلة خاصة؛
// طريقة البناء بدون معلمات
الحيوان العام () {
..... // التعامل مع
}
/*
إذا قمت بتعريف مُنشئ جديد، فيمكنك في مُنشئ الفئة الفرعية استدعاء مُنشئ الفئة الأصلية دون الاتصال به بشكل صريح، لأن الفئة الفرعية تحتوي على مُنشئ بدون معلمات.
ستقوم الفئة الفرعية تلقائيًا باستدعاء المُنشئ بدون معلمات المحدد بواسطة الفئة الأصلية في المُنشئ.
*/
الحيوان العام (اسم السلسلة) {
this.name = name;
}
}