العودة إلى الدورة

التجريد باستخدام الواجهات (والدوال الافتراضية)

إتقان لغة Java: من الصفر إلى مطور محترف (رحلة من 50 درساً)

الدرس 25: التجريد باستخدام الواجهات (Interfaces)

الـ واجهة (Interface) هي طريقة أخرى لتحقيق التجريد بنسبة 100% في Java. إنها مخطط للفئة يحدد عقداً: يجب على أي فئة تنفذ الواجهة أن تعرف الدوال المصرح عنها فيها.

1. الخصائص الرئيسية للواجهات

  1. تُعرف باستخدام الكلمة المفتاحية interface.
  2. تستخدم الفئة الكلمة المفتاحية implements لتبني واجهة.
  3. تدعم الواجهات الوراثة المتعددة (يمكن للفئة تنفيذ واجهات متعددة).
  4. قبل Java 8، كانت جميع الدوال في الواجهة ضمنياً public و abstract.

java public interface Swimmer { // واجهة // جميع الدوال عامة ومجردة افتراضياً void swim(); void dive(int depth); }

public class Dolphin implements Swimmer { @Override public void swim() { System.out.println("Dolphin swims gracefully."); }

@Override
public void dive(int depth) {
    System.out.println("Diving to " + depth + " meters.");
}

}

2. الدوال الافتراضية (Java 8+)

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

java public interface Swimmer { void swim();

// دالة افتراضية: توفر تنفيذاً افتراضياً
default void checkStatus() {
    System.out.println("Swimmer status: OK");
}

}

// لا يحتاج Dolphin لتنفيذ checkStatus() إلا إذا أراد تجاوزها.

3. الواجهات مقابل الفئات المجردة

الميزةالواجهةالفئة المجردة
الوراثةمتعددة (implements)فردية (extends)
المنشئاتلا يمكن أن تحتوي عليهايمكن أن تحتوي عليها
الحقولفقط public static finalيمكن أن تحتوي على أي نوع من الحقول
مستوى التجريد100% (غالباً)من 0% إلى 100%

حالة الاستخدام: استخدم الواجهات عند تحديد قدرة أو عقد (مثل Runnable, Comparable). استخدم الفئات المجردة عند تقديم تنفيذ أساسي لمجموعة من الفئات المرتبطة وثيقاً (مثل Shape, Employee).