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

ما هو التحميل الزائد للمنشئ في Java?
التحميل الزائد للمنشئ في Java هي تقنية يتم فيها تعريف عدة دوال إنشاء في الصنف، وتختلف هذه الدوال في قائمة المعاملات. يقوم المترجم بتمييز هذه الدوال من خلال تحليل عدد المعاملات وأنواع بياناتها.
أمثلة على الدوال البانية الصحيحة للفئة الحساب موضحة أدناه:
Account(int a); Account (int a,int b); Account (String a,int b);
لماذا نحتاج إلى تحميل المُنشئ الزائد في Java?
التحميل الزائد للمنشئ في Java يعمل على تحسين المرونة وكفاءة الكود من خلال السماح بوجود عدة مُنشئات في فئة واحدة، كل منها بقائمة معلمات مختلفة.
- المرونة في إنشاء الكائنات: تتيح لك خاصية التحميل الزائد للمنشئ تهيئة الكائنات بطرق مختلفة، اعتمادًا على عدد أو نوع المعلمات.
- Code إعادة الاستخدام: يمكنك إعادة استخدام منطق المُنشئ عن طريق استدعاء مُنشئ من آخر باستخدام هذا() الكلمة.
- تحسين إمكانية القراءة: تُسهّل الدوال البانية المُحمّلة بشكل زائد عملية كتابة التعليمات البرمجية من خلال توفير خيارات محددة لتلبية احتياجات التهيئة المختلفة.
- التهيئة الافتراضية والمخصصة: تتيح لك خاصية التحميل الزائد للمنشئ إنشاء كل من الكائنات الافتراضية والكائنات المُهيأة حسب الطلب بسهولة.
مثال: تحميل المُنشئ الزائد في Java
يوضح المثال التالي مفهوم تحميل المُنشئ الزائد في Java باستخدام فئة تسمى عرض تقديمي.
الخطوة 1) اكتب الكود في المحرر.
class Demo{ int value1; int value2; /*Demo(){ value1 = 10; value2 = 20; System.out.println("Inside 1st Constructor"); }*/ Demo(int a){ value1 = a; System.out.println("Inside 2nd Constructor"); } Demo(int a,int b){ value1 = a; value2 = b; System.out.println("Inside 3rd Constructor"); } public void display(){ System.out.println("Value1 === "+value1); System.out.println("Value2 === "+value2); } public static void main(String args[]){ Demo d1 = new Demo(); Demo d2 = new Demo(30); Demo d3 = new Demo(30,40); d1.display(); d2.display(); d3.display(); } }
الخطوة 2) احفظ الكود، وقم بتجميعه، ثم قم بتشغيله.
الخطوة 3) يظهر خطأ. حاول تصحيح الخطأ قبل المتابعة إلى الخطوة التالية من تحميل المُنشئ الزائد في Java.
الخطوة 4) كل فئة لديها الافتراضي البناء في Javaالمُنشئ الافتراضي لـ فئة تجريبية is تجريبي ()إذا لم تقم بتوفيره، يقوم المترجم بإنشائه لك ويقوم بتهيئة المتغيرات بالقيم الافتراضية.
لكن إذا قمت بتحديد مُنشئ مُعامل مثل Demo(int a) وأريد استخدام الإعداد الافتراضي تجريبي ()، من الضروري الإعلان عنه صراحةً.
الخطوة 5) قم بإلغاء التعليق على الأسطر من 4 إلى 8 من الكود، ثم احفظه وقم بتجميعه وتشغيل البرنامج مرة أخرى لملاحظة التغيير في السلوك.
تسلسل المُنشئ في Java
فكر في سيناريو يتم فيه توسيع الفصل الأساسي بواسطة طفل. عندما يتم إنشاء كائن من الفئة الفرعية، يتم استدعاء مُنشئ الفئة الأصل أولاً. هذا يسمي تسلسل البناء.
على سبيل المثال: لفهم تسلسل المُنشئ مع تحميل المُنشئ الزائد في Java
الخطوة 1) انسخ الكود التالي إلى المحرر.
class Demo{ int value1; int value2; Demo(){ value1 = 1; value2 = 2; System.out.println("Inside 1st Parent Constructor"); } Demo(int a){ value1 = a; System.out.println("Inside 2nd Parent Constructor"); } public void display(){ System.out.println("Value1 === "+value1); System.out.println("Value2 === "+value2); } public static void main(String args[]){ DemoChild d1 = new DemoChild(); d1.display(); } } class DemoChild extends Demo{ int value3; int value4; DemoChild(){ //super(5); value3 = 3; value4 = 4; System.out.println("Inside the Constructor of Child"); } public void display(){ System.out.println("Value1 === "+value1); System.out.println("Value2 === "+value2); System.out.println("Value1 === "+value3); System.out.println("Value2 === "+value4); } }
الخطوة 2) قم بتشغيل الكود. بسبب تسلسل المُنشئ، عندما يكون كائن الفئة الفرعية ديموتشيلد يتم إنشاء المُنشئ تجريبي () يتم استدعاء الفئة الأصلية أولاً، ثم يتم استدعاء المُنشئ. DemoChild() يركض الطفل بعد ذلك.
الناتج المتوقع:
Inside 1st Parent Constructor Inside the Constructor of Child Value1 === 1 Value2 === 2 Value1 === 3 Value2 === 4
الخطوة 3) قد تلاحظ أن المُنشئ الأبوي تجريبي () يتم تشغيله افتراضيًا. لاستدعاء المُنشئ المُحمّل بشكل زائد. Demo(int a) بدلاً من ذلك، استخدم الكلمة المفتاحية "ممتاز".
بناء الجملة:
super(); --or-- super(parameter list);
على سبيل المثال: إذا كان مُنشئ الأصل الخاص بك مثل Demo(String Name, int a)، سوف تحدد ممتاز("Java"،5). إذا تم استخدامها، الكلمة الأساسية السوبر يجب أن يكون هذا السطر هو السطر الأول من التعليمات البرمجية في مُنشئ الفئة الفرعية.
الخطوة 4) قم بإلغاء التعليق على السطر 26 وشغّل الكود. لاحظ الناتج.
الإخراج:
Inside 2nd Parent Constructor Inside the Constructor of Child Value1 === 5 Value2 === 0 Value1 === 3 Value2 === 4
