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

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

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

أمثلة على المنشئين الصالحين لفئة الحساب هي

Account(int a);
Account (int a,int b);
Account (String a,int b);

مثال 2: لفهم التحميل الزائد للمنشئ في 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. الافتراضي منشئ مثقلة Java لـ فئة تجريبية is تجريبي (). في حالة عدم توفير هذا المنشئ، يقوم المترجم بإنشائه لك وتهيئة المتغيرات إلى القيم الافتراضية. يمكنك اختيار تجاوز هذا المنشئ الافتراضي وتهيئة المتغيرات إلى القيم التي تريدها كما هو موضح في المثال 1.

ولكن إذا قمت بتحديد مُنشئ ذو معلمات مثل Demo(int a)، وتريد استخدام المُنشئ الافتراضي Java Demo()، فمن الضروري أن تحدده.

وبعبارة أخرى، في حالة وجود منشئ التحميل الزائد الخاص بك Java تم تجاوزه، وتريد استخدام المنشئ الافتراضي Java، لا بد من تحديدها.

الخطوة 5) قم بإلغاء التعليق على السطر رقم 4-8. حفظ وتجميع وتشغيل التعليمات البرمجية.

لماذا نحتاج إلى زيادة تحميل المنشئ في Java?

التحميل الزائد للمنشئ في Java يسمح بإنشاء عدة منشئين في فئة واحدة، ولكل منهم قائمة معلمات مختلفة. وهو يعزز المرونة ويحسن كفاءة الكود.

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

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

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

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

  • يتم تعيين أنواع البيانات الرقمية على 0
  • تم تعيين أنواع بيانات char على حرف فارغ ('\0')
  • يتم تعيين المتغيرات المرجعية على قيمة خالية

  1. لديها نفس الاسم كالفصل
  2. لا ينبغي أن ترجع قيمة ولا حتى باطل

مثال 1: قم بإنشاء المنشئ الأول الخاص بك في Java

الخطوة 1) اكتب برنامج البناء التالي في Java رئيس التحرير.

class Demo{
      int  value1;
      int  value2;
      Demo(){
         value1 = 10;
         value2 = 20;
         System.out.println("Inside Constructor");
     }
 
     public void display(){
        System.out.println("Value1 === "+value1);
        System.out.println("Value2 === "+value2);
    }
 
   public static void main(String args[]){
       Demo d1 = new Demo();
      d1.display();
  }
}

الخطوة 2) حفظ وتشغيل وتجميع برنامج البناء في Java ومراقبة الإخراج.

الناتج المتوقع:

Inside Constructor
Value1 === 10
Value2 === 20

فكر في سيناريو يتم فيه توسيع الفصل الأساسي بواسطة طفل. عندما يتم إنشاء كائن من الفئة الفرعية، يتم استدعاء مُنشئ الفئة الأصل أولاً. هذا يسمي تسلسل المُنشئ.

مثال 3: لفهم تسلسل المنشئ

الخطوة 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، يتم استدعاء المنشئ Demo() للفئة الأصلية أولاً ثم يتم إنشاء المنشئ DemoChild() للفئة الفرعية لاحقًا.

الناتج المتوقع:

Inside 1st Parent Constructor
Inside the Constructor of Child
Value1 === 1
Value2 === 2
Value1 === 3
Value2 === 4

الخطوة 3) قد تلاحظ أن مُنشئ الفئة الأصلية قد تم تجاوزه. ماذا لو كنت تريد استدعاء Demo(int a) المُنشئ المُتجاوز بدلاً من المُنشئ الافتراضي Demo() عند إنشاء الكائن الفرعي الخاص بك؟

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

بناء الجملة:-

super();
--or--
super(parameter list);

على سبيل المثال: إذا كان المنشئ الخاص بك مثل العرض التوضيحي (اسم السلسلة، كثافة العمليات أ)، سوف تحدد ممتاز("Java"،5). إذا تم استخدامها، الكلمة الأساسية يجب أن يكون super هو السطر الأول من التعليمات البرمجية في منشئ فئة الطفل.

الخطوة 4) قم بإلغاء التعليق على السطر رقم 26 وقم بتشغيل الكود. مراقبة الإخراج.

الإخراج:

Inside 2nd Parent Constructor
Inside the Constructor of Child
Value1 === 5
Value2 === 0
Value1 === 3
Value2 === 4

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