📘 شرح الدرس الوحدة 5: البرمجة الشيئية · الدرس 14 من 17
الدرس 14
📋 في الخطة: الوحدة 10. التوريث والتعدد · ⏱ 1 نظري + 3 عملي

الوراثة

نبني كلاسًا جديدًا على كلاس موجود، فيرث خصائصه ودواله ونضيف إليه ما يخصّه.

EmployeeProgrammerManagerextends
بعد هذا الدرس ستستطيع أن:
  • تعرّف الوراثة، وتميّز بين الكلاس الأب superclass والكلاس الابن subclass.
  • تبني كلاسًا يرث كلاسًا آخر باستخدام extends.
  • تحدد الأعضاء التي يرثها الكلاس الابن حسب محددات الوصول.
  • تستخدم super لاستدعاء دالة بناء الأب أو الوصول إلى أعضائه.
  • تتتبّع ترتيب تنفيذ دوال البناء في الوراثة المتتالية.

١ما هي الوراثة؟

إمكانية بناء كلاس جديد على أساس كلاس موجود. الابن يرث كل خصائص الأب ودواله (المسموح بها)، ثم نضيف إليه ما يحتاجه.
الكلاس المورِّثالكلاس الوارث
Superclass · Parent · BaseSubclass · Child · Derived · Extended
الأب، الأساس، الفئة العلويةالابن، المشتق، الفئة الفرعية
snippet
class A {} class B extends A {   // B يرث من A}

٢لماذا نحتاجها؟ مثال الموظفين

Programmer~ name : String~ address : String~ phoneNumber : String~ experience : float~ programmingLanguages : String[]~ writeCode() : voidManager~ name : String~ address : String~ phoneNumber : String~ experience : float~ teamSize : int~ reportProjectStatus() : void
🧩 قبل الوراثة: name و address و phoneNumber و experience مكرّرة في الكلاسين.
Employee~ name : String~ address : String~ phoneNumber : String~ experience : floatProgrammer~ programmingLanguages : String[]~ writeCode() : voidManager~ teamSize : int~ reportProjectStatus() : void
🧩 بعد الوراثة: المشترك في Employee مرة واحدة، وكل ابن يضيف ما يخصّه. السهم برأس مثلث فارغ يعني «يرث من» extends.
Employees.java
class Employee {    String name;    String address;    String phoneNumber;    float experience;}class Programmer extends Employee {    String[] programmingLanguages;    void writeCode() {}}class Manager extends Employee {    int teamSize;    void reportProjectStatus() {}}
Employee~ facebookId~ name~ address~ phoneNumber~ experienceAstronaut~ hoursInSpaceDoctor~ surgeryProgrammer~ programmingLanguages~ writeCode()Manager~ teamSize~ reportProjectStatus()
🧩 تقليل التكرار وسهولة التعديل: أربعة أنواع من الموظفين تشترك في Employee، وإضافة facebookId لهم جميعًا تكون في مكان واحد.
♻️ إعادة استخدام الكودالمشترك يُكتب مرة واحدة في الأب.
✂️ تكرار أقللا نعيد name و address في كل كلاس.
🔧 تعديل أسهلإضافة خاصية لكل الموظفين = تعديل الأب فقط.

٣ماذا يُورث؟

عضو الأبفي الحزمة نفسهافي حزمة أخرى
private✗✗
default✓✗
protected✓✓
public✓✓

٤الكلمة super

A.java
class A{    public void printName()    {        System.out.println("A");    }} class B extends A{    public void printName()    {        System.out.println("B");        super.printName();    }} public class Main{    public static void main(String[] args)    {        B obj = new B();        obj.printName();    }}
Output – JavaApplication (run)×
run:
B
A
BUILD SUCCESSFUL (total time: 0 seconds)

ترتيب دوال البناء: الجد ثم الأب ثم الابن

🔎 تتبّع: من يُنفَّذ أولًا عند new C()؟
A.java
class A{    public A()    {        System.out.println("Hello, I am the class A");    }} class B extends A{    public B()    {        System.out.println("Hi, I am the class B");    }} class C extends B{    public C()    {        System.out.println("I am the class C");    }} public class Main{    public static void main(String[] args)    {        C obj = new C();    }}
Variables · المتغيّرات في الذاكرة
Output×

٥أشكال الوراثة

وراثة مفردة SingleAB متعدّدة المستويات MultilevelABC هرمية HierarchicalABC
الأشكال الثلاثة مدعومة في جافا: فردية، ومتتالية، وهرمية. أما الوراثة المتعددة Multiple (كلاس يرث كلاسين معًا) فلا تدعمها جافا.
✗ خطأ
snippet
class C extends A, B {}
✓ صواب
snippet
class B extends A { }class C extends B { }

جافا لا تسمح بالوراثة من كلاسين معًا. البديل الوراثة المتتالية، أو الواجهات interface في درس التجريد.

توقّع وتحقّق

الكلمة التي تجعل كلاسًا يرث آخر:

تأمل الكود التالي،

snippet
class A {    A() { System.out.print("A "); }}class B extends A {    B() { System.out.print("B "); }}class C extends B {    C() { System.out.print("C "); }} // main داخل الدالةnew C();

ماذا سيكون الناتج عند تنفيذ السطر الأخير؟

عند إنشاء كائن من C تُستدعى دالة بناء الأب أولًا: A ثم B ثم C.

عضو private في الأب:

أين يُكتب super(name);؟

الخلاصة

🧪 تدريبات المذكرة العملية

التدريب العملي 54: المبرمج يرث الموظفمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←التدريب العملي 55: super ودوال البناءمن مذكرة العملي: المسألة، والخوارزمية، والمخرجات، والحل.افتح التدريب ←انتقل إلى تقييم الدرسأسئلة الاختيار، وصح وخطأ، وأكمل الفراغات، والأسئلة العملية.ابدأ التقييم ←