الـConstructor وأنواعه (No-Arg, Parameterized, Default)
ما هو الـConstructor؟
- إنها طريقة خاصة في فئة Java يتم استدعاؤها تلقائيًا عند إنشاء كائن جديد من تلك الفئة.
- والغرض الأساسي منه هو تهيئة سمات الكائن (الحقول أو المتغيرات) للقيم الأولية المناسبة.
- فهو يضمن إنشاء الكائنات في حالة صالحة ومتسقة.
قواعد إنشاء Constructors:
- نفس اسم الفئة: يجب أن يكون اسم المنشئ مطابقًا تمامًا لاسم الفئة.
- لا يوجد نوع إرجاع صريح: ليس لدى المنشئين نوع إرجاع، ولا حتى باطل.
- لا يمكن أن تحتوي على Modifiers: لا يمكن الإعلان عن المنشئات على أنها مجردة أو ثابتة أو نهائية أو متزامنة.
أنواع الـConstructor:
- No-Arg Constructor: مُنشئ لا يقبل أي arguments.
public class Product { private String name; private String description; private float price; private int quantity; private float discount; public Product() { this.name = "No name"; this.description = "No description"; this.price = 0.0f; this.quantity = 0; this.discount = 0; } }
- Parameterized Constructor: مُنشئ يقبل arguments.
public Product(String n, String d, float p, int q, float dis) { this.name = n; this.description = d; this.price = p; this.quantity = q; this.discount = dis; }
- Default Constructor: المُنشئ الذي يتم إنشاؤه تلقائيًا بواسطة مترجم Java إذا لم يتم تعريفه بشكل صريح.
Constructor Chaining
تسلسل المُنشئ: عندما يستدعي المُنشئ مُنشئًا آخر من نفس الفئة، يُسمى ذلك تسلسل المُنشئ.
الكود:
Product class:
public class Product { private String name; private String description; private float price; private int quantity; private float discount; private String color; public Product() { this.name = "No name"; this.description = "No description"; this.price = 0.0f; this.quantity = 0; this.discount = 0; } public Product(String n, String d, float p, int q, float dis) { this.name = n; this.description = d; this.price = p; this.quantity = q; this.discount = dis; System.out.println("constructor: 5"); } public Product(String n, String d, float p, int q, float dis, String c) { this (n,d,p,q,dis); this.color = c; System.out.println("constructor: 6"); } public void display() { System.out.println("Name = " + name); System.out.println("description = " + description); System.out.println("Price = " + price); System.out.println("Quantity = " + quantity); System.out.println("Discount = " + Discount); } }
صفات:
- name: نص يمثل اسم المنتج.
- description: نص يصف المنتج.
- price: فاصلة عشرية تخزن سعر المنتج.
- quantity: عدد صحيح يمثل كمية المنتج.
- discount: فاصلة عشرية تمثل نسبة الخصم.
- color: سلسلة (اختيارية) للون المنتج (تمت إضافتها في المُنشئ الثالث).
Constructors:
- Product() (المنشئ الافتراضي): تهيئة جميع السمات بالقيم الافتراضية (“No name”, “No description”، وما إلى ذلك).
- المنتج (String n، String d، float p، int q، float dis): مُنشئ ذو معلمات يأخذ وسيطات للاسم والوصف والسعر والكمية والخصم. يطبع "constructor: 5" عند الاستدعاء.
- المنتج (String n، String d، float p، int q، float dis، String c): مُنشئ ذو معلمات يأخذ الوسائط لجميع السمات، بما في ذلك اللون. يستدعي المُنشئ الثاني داخليًا (“constructor: 5”) ثم يقوم بتعيين اللون. يطبع "constructor: 6" عند الاستدعاء.
- display(): طباعة معلومات المنتج بتنسيق سهل الاستخدام.
Main Class:
public class Main { public static void main(String args[]) { Product p1 = new Product("Camera", "Auto focus", 99, 10, 5, "red"); Product p2 = new Product(); p.display(); } }
يقوم بإنشاء كائنين:
- p1 باستخدام المُنشئ الثالث، مما يوفر قيمًا لجميع السمات.
- p2 باستخدام المُنشئ الافتراضي (لم يتم توفير وسائط).
يحاول استدعاء display() على المتغير المشار إليه بشكل غير صحيح p (يجب أن يكون p2) لعرض القيم الافتراضية.