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

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

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

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

المثال الأول

A.java
public class A {
 
    public int x;
    public int y;
 
    // A هنا قمنا بتعريف الكونستركتور الإفتراضي للكلاس
    // سيتم تنفيذه بشكل تلقائي في أي كلاس يرث منه .A و بما أنه لا يوجد غيره في الكلاس
    public A() {
        x = 50;
        y = 100;
    }
 
}

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

Main.java
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.
تذكر أنه لا يوجد داعي لكتابة هذا الكود لأن مترجم لغة جافا يفعل ذلك بشكل تلقائي عنك.

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

A.java
public class A {
 
    public int x;
    public int y;
 
    // A هنا قمنا بتعريف الكونستركتور الإفتراضي للكلاس
    // سيتم تنفيذه بشكل تلقائي في أي كلاس يرث منه .A و بما أنه لا يوجد غيره في الكلاس
    public A() {
        x = 50;
        y = 100;
    }
 
}

B.java
public class B extends A {    // A يرث من الكلاس B هنا قلنا أن الكلاس
 
                              // نفس الشرح السابق تماماً, لكن هنا يمكنك القول أننا ذكرنا ما حدث بتفصيل
    public B() {              // B عند استخدام هذا الكونستركتور لإنشاء كائن من الكلاس
        super();              // A سيتم إستدعاء كونستركتور الكلاس
    }
 
}

Main.java
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 كما يشاء.

المثال الثالث

A.java
public class A {
 
    public int x;
    public int y;
 
    // A هنا قمنا بتعريف الكونستركتور الإفتراضي للكلاس
    // سيتم تنفيذه بشكل تلقائي في أي كلاس يرث منه .A و بما أنه لا يوجد غيره في الكلاس
    public A() {
        x = 50;
        y = 100;
    }
 
}

B.java
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 هنا سيتم تبديل قيمة المتغير
    }
 
}

Main.java
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