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

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

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

Java المصفوفات

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

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

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

معالجة الاستثنائات في Java

قوائم Java List

Java Queue (الطابور)

مجموعات Java Map

مجموعات Java Set

مدخلات/مخرجات Java (I/O)

قراء/كتابة Java

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

طرق الافتراضية Java 8

ميزات Java 8 الجديدة

أضاف Java 8 طرق الواجهة الافتراضية.

بشكل بسيط، الطريقة الافتراضية هي أن الواجهة يمكن أن تحتوي على طرق، وأن لا تحتاج الفئة المحددة إلى تنفيذ هذه الطرق.

لإجراء الطريقة الافتراضية، يكفي فقط إضافة كلمة default قبل اسم الطريقة.

لماذا نحتاج إلى هذه الخاصية؟

الواجهة السابقة كانت سيفاً ذو حدين، الجانب الإيجابي هو التوجه نحو الت抽象 بدلاً من التوجه نحو التمثيل، والنقطة السلبية هي أنك تحتاج إلى تعديل جميع الفئات التي تحقق الواجهة عند الحاجة إلى تعديل الواجهة، في إطار Java قبل Java 8 لم يكن هناك طريقة foreach في مجموعة التجميع، عادةً يمكن التفكير في حل هو إضافة طريقة جديدة وإجراءها في JDK. ومع ذلك، فإنه لا يمكن إضافة طريقة جديدة إلى الواجهة دون تأثير على التنفيذ الحالي. لذلك تم تقديم الطرق الافتراضية. هدافهم هو حل مشكلة عدم التطابق بين تعديل الواجهة والتنفيذ الحالي.

النمذجة

نموذج جملة الطريقة الافتراضية كالتالي:

public interface Vehicle {
   default void print(){
      System.out.println("أنا سيارة!");
   }
}

عدة طرق افتراضية

واجهة تحتوي على طريقة افتراضية، لنفترض أن هناك حالة حيث قام فئة واحدة بتطبيق عدة واجهات ولديها طرق افتراضية متشابهة، على سبيل المثال:

public interface Vehicle {
   default void print(){
      System.out.println("أنا سيارة!");
   }
}
 
public interface FourWheeler {
   default void print(){
      System.out.println("أنا سيارة أربعة عجلات!");
   }
}

حلول أولى هي إنشاء طريقة افتراضية خاصة بك لتغطية تعديل الطريقة الافتراضية الخاصة بالواجهة:

public class Car implements Vehicle, FourWheeler {
   default void print(){
      System.out.println("أنا سيارة أربعة عجلات!");
   }
}

حلول ثاني يمكن استخدامه super للإتصال بالطريقة الافتراضية الخاصة بالواجهة المحددة:

public class Car implements Vehicle, FourWheeler {
   public void print(){
      Vehicle.super.print();
   }
}

طرق افتراضية

واحدة من خصائص Java 8 هي أن يمكن للواجهات أن تُعلن (ويمكنها تقديم) طرق ثابتة. على سبيل المثال:

public interface Vehicle {
   default void print(){
      System.out.println("أنا سيارة!");
   }
    // طريقة ثابتة
   static void blowHorn(){
      System.out.println("أنقر على الصافرة!!!");
   }
}

مثال على الطريقة الافتراضية

يمكننا فهم استخدام الطرق الافتراضية من خلال الأتي من خلال وضع الكود في ملف Java8Tester.java:

public class Java8Tester {
   public static void main(String args[]){
      Vehicle vehicle = new Car();
      vehicle.print();
   }
}
 
interface Vehicle {
   default void print(){
      System.out.println("أنا سيارة!");
   }
    
   static void blowHorn(){
      System.out.println("أنقر على الصافرة!!!");
   }
}
 
interface FourWheeler {
   default void print(){
      System.out.println("أنا سيارة أربعة عجلات!");
   }
}
 
class Car implements Vehicle, FourWheeler {
   public void print(){
      Vehicle.super.print();
      FourWheeler.super.print();
      Vehicle.blowHorn();
      System.out.println("أنا سيارة!");
   }
}

ت�行 الوسائط أعلاه، الناتج هو:

$ javac Java8Tester.java 
$ java Java8Tester
أنا سيارة!
أنا سيارة أربعة عجلات!
أنقر على الصافرة!!!
أنا سيارة!

ميزات Java 8 الجديدة