English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تعليمات Java الأساسية

Javaُ التحكمُ فيُ العمليةُ

Javaُ Arraysُ (الصفوفُ)

Javaُ الموجهةُ للأشياءُ (I)

Javaُ الموجهةُ للأشياءُ (II)

Javaُ الموجهةُ للأشياءُ (III)

معالجة الاستثناء Java

Javaُ Listُ (القائمةُ)

Javaُ Queueُ (الصف)

Javaُ Mapُ المجموعاتُ

Javaُ Setُ المجموعاتُ

Javaُ إدخالُ/إخراجُ (I/O)

Javaُ Reader/Writer

مواضيعُ Javaُ أخرى

التركة Java

فيُ هذاُ الدليلُ،ُ سنُتعلمُ عنُ الوراثةُ فيُ Javaُ باستخدامُ الأمثلةُ.

الوراثةُ هيُ واحدةُ منُ الميزاتُ المهمةُ فيُ OOP (برمجةُ الموجهةُ للأشياء)،ُ وتُمكنُناُ منُ تعريفُ فئةُ جديدةُ منُ الفئاتُ الموجودةُ مسبقًا.

classُ Animal
)}
    //ُ methodُ eat()ُ
    //ُ methodُ sleep()ُ
}
classُ Dogُ extendsُ Animal
)}
    // طريقة bark()
}

في Java، نستخدم الكلمة المفتاح extends للوراثة من فئة. هنا، نرث فئة Dog من فئة Animal

Animal هي فئة أم (فئة آباء أو أساسية)، وDog هي فرعية (فئة فرعية أو مكتسبة). تنقل الفرعية أقل الفئات حقلين وطرق.

علاقة is-a

الوراثة هيis-aالعلاقة، نستخدم الوراثة فقط عندما يكون هناك علاقة is-a بين فئتين

هناك بعض الأمثلة:

  • السيارة هي مركبة

  • البرتقالي هو فاكهة

  • المحترف هو طبيب

  • الكلب هو حيوان

مثال 1: الوراثة في Java

class Animal {
   public void eat() {
      System.out.println("I can eat");
   }
   public void sleep() {
      System.out.println("I can sleep");
   }
}
class Dog extends Animal {
   public void bark() {
      System.out.println("I can bark");
   }
}
class Main {
   public static void main(String[] args) {
      Dog dog1 = new Dog();
      dog1.eat();
      dog1.sleep();
      dog1.bark();
   }
}

نتيجة الإخراج

أستطيعُ الأكل
أستطيعُ النوم
I can bark

في هذا السياق، نرث فرعية Dog من فئة父 Animal. Dog يرث طرق eat() وsleep() من فئة Animal

لذلك، يمكن للعناصر من فئة Dog الوصول إلى أعضاء فئة Dog وفئة Animal

مفتاح protected

لقد تعرفنا في درس سابق على معدلات الوصول private وpublic

  • يمكن الوصول إلى الأعضاء private فقط داخل الفئة

  • يمكن الوصول إلى الأعضاء public من أي مكان

يمكنك أيضًا تعيين طرق وأ成员 كprotected، يمكن الوصول إلى الأعضاء المحميين

  • داخل الفئة

  • في فرعية

  • في نفس المجموعة

هذا هو مختصر يمكن الوصول إلى معدلات الوصول.

معدلفئة
مجموعة
فرعيعالمي
publicنعمنعمنعمنعم
privateنعملالالا
protectedنعمنعمنعملا

مثال 2: المفتاح protected

class Animal {
   protected String type;
   private String color;
   public void eat() {
      System.out.println("I can eat");
   }
   public void sleep() {
      System.out.println("I can sleep");
   }
   public String getColor(){
      return color;
   }
   public void setColor(String col){
      color = col;
   }
}
class Dog extends Animal {
   public void displayInfo(String c){
      System.out.println("أنا " + type);
      System.out.println("لوني " + c);
   }
   public void bark() {
      System.out.println("I can bark");
   }
}
class Main {
   public static void main(String[] args) {
      Dog dog1 = new Dog();
      dog1.eat();
      dog1.sleep();
      dog1.bark();
 
      dog1.type = "mammal";
      dog1.setColor("black");
      dog1.displayInfo(dog1.getColor()); 
   }
}

نتيجة الإخراج

أستطيعُ الأكل
أستطيعُ النوم
I can bark
أنا حيوان
لوني أسود

في هذا السياق، الحقل نوع في فئة Animal محمي. لقد أتممنا الوصول إلى هذا الحقل من فئة Main

dog1.type = "mammal";

هذا ممكن لأن كلاً من 类 Animal و Main توجدان في نفس الملف (نفس المجموعة).

تعديل الطريقة في Java

من خلال المثال السابق، نعلم أن كائن الفئة الفرعية يمكنه الوصول إلى طرق الفئة الأصلية.

 ماذا سيحدث إذا تم تعريف نفس الطريقة في الفئة الأصلية والفئة الفرعية؟

حسنًا، في هذه الحالة، سيقوم الطريقة في الفئة الفرعية بتعديل الطريقة في الفئة الأصلية. على سبيل المثال،

مثال 3: تعديل/تغطية الطريقة

class Animal {
   protected String type = "animal";
   public void eat() {
      System.out.println("I can eat");
   }
   public void sleep() {
      System.out.println("I can sleep");
   }
}
class Dog extends Animal {
  
   @Override
   public void eat() {
      System.out.println("I eat dog food");
   }
   public void bark() {
      System.out.println("I can bark");
   }
}
class Main {
   public static void main(String[] args) {
      Dog dog1 = new Dog();
      dog1.eat();
      dog1.sleep();
      dog1.bark();
   }
}

نتيجة الإخراج

أُأكلُ طعام الكلاب
أستطيعُ النوم
I can bark

في هذا المكان، تظهر طريقة eat() في الفئة الأصلية Animal والفئة الفرعية Dog. أنشأنا كائن فرعي Dog dog1.

عندما نستدعي طريقة eat() باستخدام كائن dog1، سيتم استدعاء الطريقة الموجودة في Dog بدلاً من الطريقة الموجودة في الفئة الأصلية. هذا يُسمى تعديل الطريقة.

في البرنامج المذكور أعلاه، استخدمنا تعليق @Override لتخبر محرر البرنامج أننا نقوم بتعديل الطريقة. ولكن هذا ليس إلزاميًا. سنقوم بدراسة المزيد في الدرس القادمتعديل الطريقة.

إذا كنت بحاجة إلى استدعاء طريقة eat() من فئة Animal الفرعية، استخدم كلمة المفتاح super.

مثال 4: كلمة المفتاح super

class Animal {
   public Animal() {
     System.out.println("I am an Animal");
   }
   public void eat() {
     System.out.println("I can eat");
   }
}
class Dog extends Animal {
   public Dog(){
      super();
      System.out.println("I am a dog");
   }
  @Override
  public void eat() {
     super.eat();
     System.out.println("I eat dog food");
  }
   public void bark() {
      System.out.println("I can bark");
   }
}
class Main {
   public static void main(String[] args) {
      Dog dog1 = new Dog();
      dog1.eat();
      dog1.bark();
   }
}

نتيجة الإخراج

أنا حيوان
أنا كلب
أستطيعُ الأكل
أُأكلُ طعام الكلاب
I can bark

في هذا المثال، استخدمنا كلمة المفتاحية super لاستدعاء مكونات الكود باستخدام super() لاستدعاء مكونات الكود باستخدام super.eat() لاستدعاء مكونات الكود باستخدام طريقة eat() من الفئة Animal الأب.

ملاحظة: الفرق بين استدعاء مكونات الكود عند استدعاء مكونات الكود عند استدعاء مكونات الكود باستخدام super عند استدعاء مكونات الكود باستخدام super. للحصول على معلومات إضافية، يرجى زيارةكلمة المفتاحية Java super.

نوع النسب

هناك خمس أنواع من النسب.

  • النسب الواحدة - الفئة B تنسب فقط من الفئة A.

  • النسب المتعددة المستويات - الفئة B تنسب من الفئة A، ثم الفئة C تنسب من الفئة B.

  • النسب الهرمية - الفئة A كأب للفئات B، C و D.

  • النسب المتعددة - الفئة C من خلال واجهة A وتوسيع B.

  • النسب المختلطة - إثنين أو أكثرالنسبية.النسب.

النسب المختلطة.

Java لا يدعم النسب المتعددة للفئات والنسب المختلطة. ولكن يمكننا تحقيق النسب المتعددة في Java من خلال واجهات. سنتعلم عن الواجهات في الفصول القادمة.

  • لماذا نستخدم النسب؟

  • أهم استخداماته هو إعادة استخدامه في الكود. لا تحتاج إلى كتابة الكود الموجود في الفئة الأب في الفئة الفرعية.