Programming Basics SQL HTML CSS JavaScript React Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Linux Learn Typing

Javaأمثلة حول وجود أكثر من كونستركتور في الـسوبر كلاس في جافا

الآن سنقوم بتقسيم الأمثلة حسب الحالة التي قد نصادفها.


الحالة الأولى

في حال كان الـ Superclass يملك 2 كونستركتور, الأول لا يحتوي أي باراميترات و الثاني يحتوي باراميترات.
هنا يمكنك عدم تعريف كونستركتور في الـ Subclass, أو تعريف واحد فارغ لكي يستدعي الكونستركتور الإفتراضي الموجود في الـ Subclass.

في هذا المثال قمنا بتعريف كلاس إسمه A يحتوي على متغيرين x و y بالإضافة إلى 2 كونستركتور, الأول لا يقبل أي باراميتر و مهمته بتوليد قيم لهما فقط و الثاني مهمته يتيح لك تمرير قيم للمتغيرات x و y مباشرةً عند إنشاء كائن.
بعدها قمنا بإنشاء كلاس إسمه B يرث من الكلاس A.

بعدها سنقوم بإنشاء الكلاس Main لتجربة الكود.

المثال الأول

A.java
public class A {
 
    public int x;
    public int y;
 
    // عند استدعائه y و x هنا قمنا بتعريف كونستركتور لا يأخذ أي باراميتر و مهمته فقط إعطاء قيم أولية للمتغيرات
    public A() {
        x = 50;
        y = 100;
    }
 
    // عند استدعائه y و x هنا قمنا بتعريف كونستركتور يسمح بتمرير قيم أولية للمتغيرات
    public A(int x, int y) {
        this.x = x;
        this.y = y;
    }
 
}

B.java
public class B extends A {          // A يرث من الكلاس B هنا قلنا أن الكلاس
 
    // هنا لا داعي لتعريف كونستركتور جديد
    // حتى و إن لم نقم باستدعائه A هنا سيتم إستدعاء الكونستركتور الإفتراضي ( الذي لا يحتوي أي بارميتر ) الموجود في الكلاس
 
}

Main.java
public class Main {
 
    public static void main(String[] args) {
 
        // B باستخدام الكونستركتور الفارغ الموجود بشكل تلقائي في الكلاس B هنا قمنا بإنشاء كائن من الكلاس
        B b = new B();
 
        System.out.println("x: " + b.x);
        System.out.println("y: " + b.y);
 
    }
 
}

سنحصل على النتيجة التالية عند التشغيل.

x: 50
y: 100 



الحالة الثانية

في حال كان الـ Superclass يملك كونستركتور أو أكثر, لكنه لا يملك كونستركتور لا يحتوي باراميترات.
هنا أنت مجبر على تعريف كونستركتور في الـ Subclass, يستدعي أي كونستركتور من الـ constructors الموجودين في الـ Superclass.

ملاحظة: عدد الباراميترات التي تضعها في كونستركتور الـ Subclass غير مهم حتى يعمل الكود بشكل سليم. المهم هنا استدعاء أي كونستركتور موجود في الـ Superclass بداخل أي كونستركتور ستقوم بتعريفه في الـ Subclass.

في هذا المثال قمنا بتعريف كلاس إسمه A يحتوي على متغيرين x و y بالإضافة إلى 2 كونستركتور, الأول لا يقبل أي باراميتر و مهمته بتوليد قيم لهما فقط و الثاني مهمته يتيح لك تمرير قيم للمتغيرات x و y مباشرةً عند إنشاء كائن.
بعدها قمنا بإنشاء كلاس إسمه B يرث من الكلاس A.

بعدها سنقوم بإنشاء الكلاس Main لتجربة الكود.

المثال الثاني

A.java
public class A {
 
    public int x;
    public int y;
 
    // عند استدعائه y و x يحتوي على كونستركتور يسمح بتمرير قيم أولية للمتغيرات A الكلاس
    // لأنه لا يوجد كونستركتور لا يحتوي على باراميترات Subclass هنا يجب استدعاء هذا الكونستركتور في أي
    public A(int x, int y) {
        this.x = x;
        this.y = y;
    }
 
}

B.java
public class B extends A {          // A يرث من الكلاس B هنا قلنا أن الكلاس
 
    // A هنا يجب تعريف كونستركتور واحد على الأقل يستدعي الكونستركتور الموجود في الكلاس
 
    // Superclass A هنا قمنا بتعريف كونستركتور يمرر القيمتين 123 و 456 في كونستركتور الـ
    public B() {
        super(123, 456);
    }
 
    // Superclass A هنا قمنا بتعريف كونستركتور نمرر له قيمتين عند استدعائه, فيقوم بدوره بتمريرهما في كونستركتور الـ
    public B(int p1, int p2) {
        super(p1, p2);
    }
 
}

Main.java
public class Main {
 
    public static void main(String[] args) {
 
        // الذي لا يأخذ باراميترات B باستخدام كونستركتور الكلاس B هنا قمنا بإنشاء كائن من الكلاس
        B b1 = new B();
        System.out.println("Here the constructor generate these values for the object b1:");
        System.out.println("x: " + b1.x);
        System.out.println("y: " + b1.y);
 
        System.out.println();
 
        // الذي يأخذ 2 باراميتر B باستخدام كونستركتور الكلاس B هنا قمنا بإنشاء كائن من الكلاس
        B b2 = new B(47, 13);
        System.out.println("Here the constructor generate these values for the object b2:");
        System.out.println("x: " + b2.x);
        System.out.println("y: " + b2.y);
 
    }
 
}

سنحصل على النتيجة التالية عند التشغيل.

Here the constructor generate these values for the object b1:
x: 123
y: 456

Here the constructor generate these values for the object b2:
x: 47
y: 13