الكلاس A يمثل الأب (الاسم والعمر)، والكلاس B يرثه ويمثل الابن (الاسم الأول والعمر). استخدم super لاستدعاء دالة بناء الأب، وللوصول إلى عمر الأب واسمه، ثم احسب فرق العمر.
٢الخوارزمية المقترحة
أ) تصميم الكلاسات
الكلاس A (الأب):
الخصائص: اسم الأب، والعمر
دالة بناء افتراضية تطبع رسالة، ودالة بناء تستقبل اسم الأب
الكلاس B يرث A (الابن):
الخصائص: الاسم الأول، والعمر
دالة بناء تستقبل الاسمين: تستدعي أولًا دالة بناء الأب (super)، ثم تخزّن الاسم الأول
دالة تطبع اسم الابن واسم الأب
دالة تعيّن عمر الأب وعمر الابن، ودالة تحسب الفرق بينهما
ب) خطوات البرنامج الرئيسي
ابدأ
أنشئ الكائن الأول بدالة البناء الافتراضية
أنشئ الكائن الثاني باسم الابن واسم الأب
اطبع الاسمين
عيّن عمر الأب 50، وعمر الابن 20
اطبع فرق العمر
توقف
٣خطوات التطبيق
في NetBeans
أنشئ مشروع Lab41 بثلاثة كلاسات A و B و Main.
لاحظ أن B فيها age أيضًا: super.age لعمر الأب و this.age لعمر الابن.
في OneCompiler
افتح OneCompiler من زر «▶ شغّل المشروع» أسفل الحل، أو من موقع onecompiler.com/java.
في OneCompiler تُكتب كل الكلاسات في ملف واحد Main.java؛ زر التشغيل يجمعها لك تلقائيًّا.
إذا كان البرنامج يقرأ من لوحة المفاتيح، فاكتب المدخلات في خانة 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)
٥الحل المقترح
حاول بنفسك أولًا، ثم قارن حلّك بالحل المقترح (كود التدريب من مذكرة العملي):
👁 اعرض الحل المقترح
SourceHistory⟲⟳🔍
Projects
☕ Lab41
📁 Source Packages
📦 lab41
📄 A.java
📄 B.java
📄 Main.java
package lab41;publicclass A {String fatherName;int age;public A() {System.out.println("Hi I am your father"); }public A(String fatherName) {this.fatherName = fatherName; }}
package lab41;publicclass 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; }publicvoid printName(){System.out.println("First name: " + firstName);System.out.println("Father name: " + super.fatherName); }publicvoid setAgeForAll(int FatherAge, int myAge){super.age = FatherAge;this.age = myAge; }publicvoid calcAge(){int dif = super.age - this.age;System.out.println("My father is " + dif +" years bigger than me"); }}
package lab41;publicclass Main {publicstaticvoid 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(); }}
مخطط المشروع مستخرج من الكود. انقر على أي كلاس لفتح كوده.
ملفات المشروع في تبويبات كما في NetBeans. زر التشغيل يجمعها في ملف واحد ليعمل على OneCompiler.
Output – Lab41 (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×
SourceHistory⟲⟳🔍
B obj1 = new B( );
في الكود، ما هو الناتج الذي سيظهر؟
2) لماذا يتم استدعاء constructor الكلاس A عند إنشاء كائن من B باستخدام
snippet×
SourceHistory⟲⟳🔍
B obj1 = new B();
3) في السطر
snippet×
SourceHistory⟲⟳🔍
B obj2 = new B("Mohammed", "Abdullah");أي constructor
يتم استدعاؤه أولاً؟
4) ماذا يحدث إذا قمنا بحذف السطر
snippet×
SourceHistory⟲⟳🔍
super(fatherName);
من B(String firstName, String fatherName)
5) في طريقة setAgeForall ما الفرق بين super.age و this.age
6) ما هو الإخراج النهائي لتنفيذ الكود في طريقة `main`؟
7) متى يجب استخدام super() ضمنيا، يدويا في الـ constructor؟
8) في أي موضع يجب أن يكون استدعاء super( ) في constructor الابن؟