فهرس المقرر
تدريب عملي

التدريب العملي 12: super ودوال البناء

A الأب و B الابن: استدعاء دالة بناء الأب بـ super، والتفريق بين age في الكلاسين.

EmployeeProgrammerManagerextends

من الدرس 8. الوراثة Inheritance · كل التدريبات

١نص المسألة

الكلاس A يمثل الأب (الاسم والعمر)، والكلاس B يرثه ويمثل الابن (الاسم الأول والعمر). استخدم super لاستدعاء دالة بناء الأب، وللوصول إلى عمر الأب واسمه، ثم احسب فرق العمر.

٢الخوارزمية المقترحة

  1. A: الخاصيتان fatherName و age، ودالة بناء افتراضية تطبع رسالة، ودالة بناء تستقبل fatherName.
  2. B extends A: الخاصيتان firstName و age (عمر الابن).
  3. دالة بناء B بمعاملين: super(fatherName) أول سطر، ثم this.firstName = firstName.
  4. printName تطبع firstName و super.fatherName.
  5. setAgeForAll: super.age لعمر الأب و this.age لعمر الابن، و calcAge تطبع الفرق.
  6. في Main: obj1 بالدالة الافتراضية، و obj2 بالاسمين، ثم الأعمار 50 و 20.

٣خطوات التطبيق

في NetBeans

  1. أنشئ مشروع Lab12 بثلاثة كلاسات A و B و Main.
  2. لاحظ أن B فيها age أيضًا: super.age لعمر الأب و this.age لعمر الابن.

في OneCompiler

  1. افتح OneCompiler من زر «▶ شغّل المشروع» أسفل الحل، أو من موقع onecompiler.com/java.
  2. في OneCompiler تُكتب كل الكلاسات في ملف واحد Main.java؛ زر التشغيل يجمعها لك تلقائيًّا.
  3. إذا كان البرنامج يقرأ من لوحة المفاتيح، فاكتب المدخلات في خانة STDIN التي تظهر تحت الكود في محرّر OneCompiler، ثم اضغط Run.

٤المخرجات المطلوبة

نفّذ برنامجك، ويجب أن تظهر المخرجات التالية:

Output – (run)×
run:
Hi I am your father
Hi I am B Class
First name: null
Father name: null
------
First name: Fahad
Father name: Ali
My father is 30 years bigger than me
BUILD SUCCESSFUL (total time: 0 seconds)

٥الحل المقترح

حاول بنفسك أولًا، ثم قارن حلّك بالحل المقترح (كود التدريب من مذكرة العملي):

👁 اعرض الحل المقترح
package lab12; public class A {    String fatherName;    int age;     public A() {        System.out.println("Hi I am your father");    }     public A(String fatherName) {        this.fatherName = fatherName;    }}
package lab12;public class B extends A {    String firstName;    int age;     public B() {        System.out.println("Hi I am B Class");    }     public B(String firstName, String fatherName) {        super(fatherName);        this.firstName = firstName;    }     public void printName(){        System.out.println("First name: " + firstName);        System.out.println("Father name: " + super.fatherName);    }    public void setAgeForAll(int FatherAge, int myAge){        super.age = FatherAge;        this.age = myAge;    }    public void calcAge(){        int dif = super.age - this.age;        System.out.println("My father is " + dif +                " years bigger than me");    }}
package lab12;public class Main {     public static void main(String[] args) {        B obj1 = new B();        obj1.printName();         System.out.println("------");         B obj2 = new B("Fahad", "Ali");        obj2.printName();        obj2.setAgeForAll(50, 20);        obj2.calcAge();    }}
مخطط المشروع مستخرج من الكود. انقر على أي كلاس لفتح كوده.
ABMain
A~ fatherName : String~ age : int+ A()+ A(fatherName : String)B~ firstName : String~ age : int+ B()+ B(firstName : String, fatherName : String)+ printName() : void+ setAgeForAll(FatherAge : int, myAge : int) : void+ calcAge() : voidMain+ main(args : String[]) : void

ملفات المشروع في تبويبات كما في NetBeans. زر التشغيل يجمعها في ملف واحد ليعمل على OneCompiler.

Output – Lab12 (run)×
run:
Hi I am your father
Hi I am B Class
First name: null
Father name: null
------
First name: Fahad
Father name: Ali
My father is 30 years bigger than me
BUILD SUCCESSFUL (total time: 0 seconds)

أسئلة المناقشة

أسئلة مناقشة على التدريب 12. إجاباتك تُحفظ تلقائيًّا على هذا الجهاز؛ أجب ثم اضغط «صحّح ورقتي».

1السؤال الأول: اختر الإجابة الصحيحة

1) عند تنفيذ السطر
snippet
B obj1 = new B( );
في الكود، ما هو الناتج الذي سيظهر؟
2) لماذا يتم استدعاء constructor الكلاس A عند إنشاء كائن من B باستخدام
snippet
       B obj1 = new B();
3) في السطر
snippet
B obj2 = new B("Mohammed", "Abdullah");أي constructor
يتم استدعاؤه أولاً؟
4) ماذا يحدث إذا قمنا بحذف السطر
snippet
super(fatherName);
من B(String firstName, String fatherName)
5) في طريقة setAgeForall ما الفرق بين super.age و this.age
6) ما هو الإخراج النهائي لتنفيذ الكود في طريقة `main`؟
7) متى يجب استخدام super() ضمنيا، يدويا في الـ constructor؟
8) في أي موضع يجب أن يكون استدعاء super( ) في constructor الابن؟
أجب عن الأسئلة ثم اضغط «صحّح ورقتي».