Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

تعدد أشكال دالة البناء (Constructor Overloading)

جزء من قسم Object Oriented Programming في رحلة Java على Coddy — الدرس 8 من 87.

تحميل المنشئ الزائد (Constructor overloading) يعني وجود عدة منشئات بقوائم معاملات مختلفة. استخدم this() لاستدعاء منشئ من آخر.

منشئات متعددة

public class Book {
    private String title;
    private String author;
    private int pages;
    
    public Book(String title, String author, int pages) {
        this.title = title;
        this.author = author;
        this.pages = pages;
    }
    
    public Book(String title, String author) {
        this.title = title;
        this.author = author;
        this.pages = 0;
    }
}

تسلسل المنشئات (Constructor chaining) باستخدام this()

public class Book {
    private String title;
    private String author;
    private int pages;
    
    public Book(String title, String author, int pages) {
        this.title = title;
        this.author = author;
        this.pages = pages;
    }
    
    public Book(String title, String author) {
        this(title, author, 0);  // يستدعي المنشئ ذو الـ 3 معاملات
    }
    
    public Book() {
        this("Unknown", "Unknown");  // يستدعي المنشئ ذو المعاملين
    }
}

الاستخدام

Book b1 = new Book("1984", "Orwell", 328);
Book b2 = new Book("Dune", "Herbert");
Book b3 = new Book();

يجب أن يكون this() هو العبارة الأولى في المنشئ (constructor). يساعد التسلسل (Chaining) في تجنب تكرار منطق التعيين عبر المنشئات.

challenge icon

التحدي

متوسط

قم بإنشاء ثلاثة منشئات (constructors) محملة بشكل زائد لفئة Product باستخدام تسلسل المنشئات (constructor chaining):

  • منشئ بـ 3 معاملات: name، price، stock
  • منشئ بمعاملين: name، price (القيمة الافتراضية لـ stock هي 0)
  • المنشئ الافتراضي: بدون معاملات (name = "Unknown"، price = 0، stock = 0)

استخدم this() لتسلسل المنشئات وتجنب تكرار الكود.

ورقة مرجعية

يسمح التحميل الزائد للمنشئ (Constructor overloading) بوجود منشئات متعددة بقوائم معلمات مختلفة في نفس الفئة.

مثال على المنشئات المتعددة:

public class Book {
    private String title;
    private String author;
    private int pages;
    
    public Book(String title, String author, int pages) {
        this.title = title;
        this.author = author;
        this.pages = pages;
    }
    
    public Book(String title, String author) {
        this.title = title;
        this.author = author;
        this.pages = 0;
    }
}

يقوم تسلسل المنشئ (Constructor chaining) باستخدام this() باستدعاء منشئ من آخر لتجنب تكرار الكود:

public class Book {
    private String title;
    private String author;
    private int pages;
    
    public Book(String title, String author, int pages) {
        this.title = title;
        this.author = author;
        this.pages = pages;
    }
    
    public Book(String title, String author) {
        this(title, author, 0);  // يستدعي المنشئ الذي يحتوي على 3 معلمات
    }
    
    public Book() {
        this("Unknown", "Unknown");  // يستدعي المنشئ الذي يحتوي على معلمتين
    }
}

الاستخدام:

Book b1 = new Book("1984", "Orwell", 328);
Book b2 = new Book("Dune", "Herbert");
Book b3 = new Book();

هام: يجب أن يكون this() هو البيان الأول في المنشئ.

جرّب بنفسك

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        double price = Double.parseDouble(scanner.nextLine());
        int stock = Integer.parseInt(scanner.nextLine());
        
        Product product1 = new Product(name, price, stock);
        Product product2 = new Product("Keyboard", 79.99);
        Product product3 = new Product();
        
        System.out.println("Product 1: " + product1.getName() + " - $" + product1.getPrice() + " (Stock: " + product1.getStock() + ")");
        System.out.println("Product 2: " + product2.getName() + " - $" + product2.getPrice() + " (Stock: " + product2.getStock() + ")");
        System.out.println("Product 3: " + product3.getName() + " - $" + product3.getPrice() + " (Stock: " + product3.getStock() + ")");
    }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming