Javaأمثلة حول وجود أكثر من كونستركتور في الـسوبر كلاس في جافا
الآن سنقوم بتقسيم الأمثلة حسب الحالة التي قد نصادفها.
الحالة الأولى
في حال كان الـ Superclass يملك 2 كونستركتور, الأول لا يحتوي أي باراميترات و الثاني يحتوي باراميترات.
هنا يمكنك عدم تعريف كونستركتور في الـ Subclass, أو تعريف واحد فارغ لكي يستدعي الكونستركتور الإفتراضي الموجود في الـ Subclass.
في هذا المثال قمنا بتعريف كلاس إسمه A
يحتوي على متغيرين x
و y
بالإضافة إلى 2 كونستركتور, الأول لا يقبل أي باراميتر و مهمته بتوليد قيم لهما فقط و الثاني مهمته يتيح لك تمرير قيم للمتغيرات x
و y
مباشرةً عند إنشاء كائن.
بعدها قمنا بإنشاء كلاس إسمه B
يرث من الكلاس A
.
بعدها سنقوم بإنشاء الكلاس Main
لتجربة الكود.
المثال الأول
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; } }
public class B extends A { // A يرث من الكلاس B هنا قلنا أن الكلاس // هنا لا داعي لتعريف كونستركتور جديد // حتى و إن لم نقم باستدعائه A هنا سيتم إستدعاء الكونستركتور الإفتراضي ( الذي لا يحتوي أي بارميتر ) الموجود في الكلاس }
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
لتجربة الكود.
المثال الثاني
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; } }
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); } }
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