Javaأمثلة حول طرق إستدعاء كونستركتور لا يحتوي باراميترات من الـسوبر كلاس في جافا
في المثال التالي قمنا بتعريف كلاس إسمه A
يحتوي على متغيرين x
و y
بالإضافة إلى كونستركتور لا يقبل أي باراميتر و مهمته بتوليد قيم لهما فقط.
بعدها قمنا بإنشاء كلاس إسمه B
يرث من الكلاس A
.
بعدها سنقوم بإنشاء الكلاس Main
لتجربة الكود.
المثال الأول
public class A { public int x; public int y; // A هنا قمنا بتعريف الكونستركتور الإفتراضي للكلاس // سيتم تنفيذه بشكل تلقائي في أي كلاس يرث منه .A و بما أنه لا يوجد غيره في الكلاس public A() { x = 50; y = 100; } }
public class B extends A { // A يرث من الكلاس B هنا قلنا أن الكلاس // أي عند إنشاء كائن منه ,B عند استدعاء الكونستركتور الإفتراضي للكلاس // حتى و إن لم نقم باستدعائه A سيتم إستدعاء الكونستركتور الإفتراضي الموجود في الكلاس }
public class Main { public static void main(String[] args) { // A من أجل عرض قيم المتغيرات التي ورثها من الكلاس B هنا قمنا بإنشاء كائن من الكلاس B b = new B(); System.out.println("x: " + b.x); System.out.println("y: " + b.y); } }
سنحصل على النتيجة التالية عند التشغيل.
x: 50 y: 100
في المثال التالي قمنا بكتابة نفس الكود السابق مع إستدعاء كونستركتور الكلاس A
في كونستركتور الكلاس B
.
تذكر أنه لا يوجد داعي لكتابة هذا الكود لأن مترجم لغة جافا يفعل ذلك بشكل تلقائي عنك.
المثال الثاني
public class A { public int x; public int y; // A هنا قمنا بتعريف الكونستركتور الإفتراضي للكلاس // سيتم تنفيذه بشكل تلقائي في أي كلاس يرث منه .A و بما أنه لا يوجد غيره في الكلاس public A() { x = 50; y = 100; } }
public class B extends A { // A يرث من الكلاس B هنا قلنا أن الكلاس // نفس الشرح السابق تماماً, لكن هنا يمكنك القول أننا ذكرنا ما حدث بتفصيل public B() { // B عند استخدام هذا الكونستركتور لإنشاء كائن من الكلاس super(); // A سيتم إستدعاء كونستركتور الكلاس } }
public class Main { public static void main(String[] args) { // A من أجل عرض قيم المتغيرات التي ورثها من الكلاس B هنا قمنا بإنشاء كائن من الكلاس B b = new B(); System.out.println("x: " + b.x); System.out.println("y: " + b.y); } }
سنحصل على النتيجة التالية عند التشغيل.
x: 50 y: 100
في المثال التالي قمنا بكتابة نفس الكود السابق مع تعريف متغير جديد في الكلاس B
إسمه z
و إعطائه قيمة في الكونستركتور, و تغيير قيمة المتغير x
في كونستركتور الكلاس B
.
عند تجربة الكود سنقوم بعرض قيم المتغيرات الموجودة في A
و B
.
الهدف الحقيقي هنا إيصال فكرة أن الـ Subclass يمكنه إستخدام الأشياء التي ورثها من الـ Superclass كما يشاء.
المثال الثالث
public class A { public int x; public int y; // A هنا قمنا بتعريف الكونستركتور الإفتراضي للكلاس // سيتم تنفيذه بشكل تلقائي في أي كلاس يرث منه .A و بما أنه لا يوجد غيره في الكلاس public A() { x = 50; y = 100; } }
public class B extends A { // A يرث من الكلاس B هنا قلنا أن الكلاس public int z; // z هنا قمنا بتعريف المتغير public B() { // B عند استخدام هذا الكونستركتور لإنشاء كائن من الكلاس super(); // A سيتم إستدعاء كونستركتور الكلاس z = 123; // z و سيتم إعطاء قيمة للمتغير x = 9; // A بالقيمة 9, مع الملاحظة أنها ستبقى 50 في أي كائن من الكلاس B في أي كائن من الكلاس x هنا سيتم تبديل قيمة المتغير } }
public class Main { public static void main(String[] args) { // A من أجل عرض قيم المتغيرات التي ورثها من الكلاس B هنا قمنا بإنشاء كائن من الكلاس B b = new B(); System.out.println("In class B we have:"); System.out.println("x: " + b.x); System.out.println("y: " + b.y); System.out.println("z: " + b.z); System.out.println(); // من أجل التأكد من أن قيم متغيراته لا تتأثر إذا تم تغيير نفس المتغيرات في أي كلاس يرث منه A هنا قمنا بإنشاء كائن من الكلاس A a = new A(); System.out.println("In class A we have:"); System.out.println("x: " + a.x); // B الموجود في الكلاس x مختلفة عن قيمة المتغير A الموجود في الكلاس x لاحظ كيف أن قيمة المتغير System.out.println("y: " + a.y); } }
سنحصل على النتيجة التالية عند التشغيل.
In class B we have: x: 9 y: 100 z: 123 In class A we have: x: 50 y: 100