ما هو تسلسل المنشئ؟
المُنشئ في Java هو أسلوب محدد يُستخدم في إنشاء كائن لفئة ما. يتم استدعاء المنشئ في كل مرة يتم فيها إنشاء كائن من الفئة. ويمكن استخدامه لتعيين قيم لخصائص الكائن في وقت الإنشاء. يمكن أن يكون هناك مُنشئون متعددون في فئة Java بقوائم معلمات مختلفة. يتم استخدام تسلسل المنشئ لاستدعاء تطبيقات مختلفة للمنشئين من نفس الفئة/الفئة الأصلية في وقت إنشاء الكائن.
كيف يتم تنفيذ تسلسل المنشئ في جافا؟
هناك طريقتان لتسلسل المنشئين بناءً على كيفية استدعاء المنشئ. وهم على النحو التالي.
- باستخدام هذه الكلمة الأساسية () - لاستدعاء المنشئين من نفس الفئة
- باستخدام الكلمة الأساسية super() - لاستدعاء مُنشئي الفئة الأصلية
وهذا موضح في الأمثلة التالية.
مثال تسلسل المُنشئ رقم 1 - يتم تسلسل المُنشئين باستخدام الكلمة الأساسية this()
لقد أعلنا عن أربعة منشئين لـ DerivedClass. واحد بدون حجج والثلاثة الآخرين بحجج مختلفة. داخل كل مُنشئ، يتم استخدام الكلمة الأساسية
this() لاستدعاء المُنشئ التالي من نفس الفئة.
package com.tutorialwriting.constchaining;
public class DerivedClass{
String firstName;
String country;
int age;
public DerivedClass() {
this("Maggie");
}
public DerivedClass(String firstName) {
this(firstName, 15);
}
public DerivedClass(String firstName, int age) {
this(firstName, age, "Australia");
}
public DerivedClass(String firstName, int age, String country) {
this.firstName = firstName;
this.age = age;
this.country = country;
}
void displayValues() {
System.out.println("First Name : " + firstName);
System.out.println("Country : " + country);
System.out.println("Age : " + age);
}
public static void main(String args[]) {
DerivedClass object = new DerivedClass();
object.displayValues();
}
}
مخرجات التنفيذ
مثال تسلسل المُنشئ رقم 2 - يتم تسلسل المُنشئين باستخدام الكلمة الأساسية super()
هنا، تستدعي الفئة الفرعية مُنشئي الفئة الأصلية باستخدام الكلمة الأساسية
super() . لدى BaseClass ثلاثة منشئين. يستدعي المُنشئ الذي لا يحتوي على أي وسائط أحد مُنشئ الوسائط الثلاثة للفئة BaseClass باستخدام
this() .
package com.tutorialwriting.constchaining;
public class BaseClass {
public BaseClass() {
this("Male", "English", "1989/11/10");
System.out.println("I'm executed third!!!");
}
public BaseClass(String firstName, String surname, int idNo) {
System.out.println("I'm executed first!");
System.out.println("First name : " + firstName);
System.out.println("Surname : " + surname);
System.out.println("ID Number : " + idNo);
}
public BaseClass(String gender, String nationality, String birthDate) {
System.out.println("I'm executed second!!");
System.out.println("Gender : " + gender);
System.out.println("Nationality : " + nationality);
System.out.println("Birth Date : " + birthDate);
}
}
يحتوي DerivedClass على مُنشئين، كل منهما يستدعي المُنشئين المختلفين للفئة الفائقة باستخدام
super() .
package com.tutorialwriting.constchaining;
public class DerivedClass extends BaseClass {
public DerivedClass() {
super();
}
public DerivedClass(String firstName, String surname, int idNo) {
super(firstName, surname, idNo);
}
public static void main(String args[]) {
DerivedClass object2 = new DerivedClass("Paul", "Wilson", 123456);
DerivedClass object1 = new DerivedClass();
}
}
مخرجات التنفيذ
استدعاء المنشئ الضمني مقابل الصريح
لدى Java طريقتان مختلفتان لاستدعاء المُنشئين: الاتصال الضمني والاتصال الصريح.
- يشير الاتصال الصريح إلى استدعاء المُنشئين بشكل صريح في الكود باستخدام this() أو super() .
- يشير الاستدعاء الضمني إلى استدعاء المُنشئ بدون وسيطة للفئة الفائقة ضمنيًا في حالة عدم وجود مثل هذا الاستدعاء الصريح من مُنشئ الفئة الفرعية. بمعنى آخر، يضيف المترجم استدعاء super() كسطر أول لأي من منشئي الفئات الفرعية إذا لم يستدعي المبرمج صراحةً super() في الكود.
لماذا نحتاج إلى تسلسل المنشئ؟
هناك عدة أغراض مختلفة لوجود سلسلة منشئة في Java، كما هو موضح أدناه.
- إنها طريقة للوصول إلى خصائص المُنشئين الآخرين أو خصائص الفئات الأصلية.
- أثناء استدعاء منشئين آخرين، يتم استخدام كائن واحد فقط، وهو المثيل الحالي للفئة. تحدث التهيئة في مكان واحد، ولكن لدينا امتياز استدعاء تطبيقات منشئة مختلفة من خلال سلسلة. وهذا يساعد بشكل كبير في إدارة الذاكرة وصيانة التعليمات البرمجية.
خاتمة
في هذا البرنامج التعليمي، ناقشنا تسلسل المنشئ في جافا. المُنشئون عبارة عن مقاطع تعليمات برمجية تشبه الطريقة يتم استدعاؤها أثناء إنشاء الكائنات. يمكن أن تحتوي فئة Java على أي عدد من المنشئات بقوائم معلمات مختلفة. يعد تسلسل المنشئ طريقة سهلة للتعامل مع عمليات التهيئة المختلفة بمثيل واحد للفئة. بعض النقاط المهمة التي يجب ملاحظتها من هذا البرنامج التعليمي مذكورة أدناه.
- إذا لم يقم المبرمج بإضافته بشكل صريح إلى التعليمات البرمجية، فسيقوم المترجم بإضافة مُنشئ عام بدون وسيطات إلى فئة Java. وهذا ما يسمى المنشئ الافتراضي.
- يجب كتابة this() و super() كسطر أول من المنشئ.
- يتم استخدام this() لاستدعاء المنشئين من نفس الفئة بينما يتم استخدام super() لاستدعاء المنشئين من الفئة الفائقة المباشرة.
- يجب أن يكون هناك مُنشئ واحد على الأقل داخل الفصل لا يحتوي على الكلمة الأساسية this() .
- إذا لم تتم إضافته بشكل صريح، فسيضيف المترجم استدعاء super() بدون وسيطات إلى كل مُنشئ فئة فرعية. سيساعد هذا في إنشاء مثيل للفصول الدراسية بشكل صحيح.
GO TO FULL VERSION