الدرس 25: التجريد باستخدام الواجهات (Interfaces)
الـ واجهة (Interface) هي طريقة أخرى لتحقيق التجريد بنسبة 100% في Java. إنها مخطط للفئة يحدد عقداً: يجب على أي فئة تنفذ الواجهة أن تعرف الدوال المصرح عنها فيها.
1. الخصائص الرئيسية للواجهات
- تُعرف باستخدام الكلمة المفتاحية
interface. - تستخدم الفئة الكلمة المفتاحية
implementsلتبني واجهة. - تدعم الواجهات الوراثة المتعددة (يمكن للفئة تنفيذ واجهات متعددة).
- قبل 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).