الكلاس A يمثل الأب (الاسم والعمر)، والكلاس B يرثه ويمثل الابن (الاسم الأول والعمر). استخدم super لاستدعاء دالة بناء الأب، وللوصول إلى عمر الأب واسمه، ثم احسب فرق العمر.
٢الخوارزمية المقترحة
A: الخاصيتان fatherName و age، ودالة بناء افتراضية تطبع رسالة، ودالة بناء تستقبل fatherName.
B extends A: الخاصيتان firstName و age (عمر الابن).
دالة بناء B بمعاملين: super(fatherName) أول سطر، ثم this.firstName = firstName.
printName تطبع firstName و super.fatherName.
setAgeForAll: super.age لعمر الأب و this.age لعمر الابن، و calcAge تطبع الفرق.
في Main: obj1 بالدالة الافتراضية، و obj2 بالاسمين، ثم الأعمار 50 و 20.
٣خطوات التطبيق
في NetBeans
أنشئ مشروع Lab12 بثلاثة كلاسات 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
☕ Lab12
📁 Source Packages
📦 lab12
📄 A.java
📄 B.java
📄 Main.java
package lab12;publicclass A {String fatherName;int age;public A() {System.out.println("Hi I am your father"); }public A(String fatherName) {this.fatherName = fatherName; }}
package lab12;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 lab12;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 – 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×
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 الابن؟