التحميل الزائد للمنشئ في Java

⚡ ملخص ذكي

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

  • ؟؟؟؟ ️ فريف: التحميل الزائد للمنشئ في Java يسمح بوجود عدة مُنشئات في نفس الفئة، يتم تمييزها من خلال عدد أو نوع أو ترتيب المعلمات.
  • 🧩 المرونة: تقوم الدوال البانية المحملة بشكل زائد بتهيئة الكائنات بمجموعات وسائط مختلفة.
  • 🔀 التسلسل: تتيح الكلمتان المفتاحيتان this() و super() إمكانية ربط الدوال البانية بشكل آمن.
  • الافتراضيات: إذا كان هناك مُنشئ مُعامل، فيجب تعريف الشكل الافتراضي.
  • 🧪 أمثلة: Code تُظهر العينات توقيعات صحيحة وسلوك تسلسلي.

التحميل الزائد للمنشئ في Java

ما هو التحميل الزائد للمنشئ في 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

الأسئلة الشائعة

المُنشئ هو دالة خاصة تُستخدم لتهيئة كائن مُنشأ حديثًا، ويتم استدعاؤها مباشرةً بعد تخصيص الذاكرة. إذا لم يُحدد المستخدم مُنشئًا، يقوم المُترجم بتهيئة متغيرات الأعضاء بقيم افتراضية مثل 0 للأنواع الرقمية و null للمراجع.

A Java يجب أن يحمل المُنشئ نفس اسم فئته، ويجب ألا يُصرّح عن أي نوع إرجاع، ولا حتى نوع void. تحميل المُنشئ الزائد في Java يتم تحقيق ذلك عن طريق تغيير عدد أو نوع أو ترتيب المعلمات عبر عدة تعريفات للمنشئ داخل نفس الفئة.

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

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

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

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

تلخيص هذه التدوينة بـ: