مفهوم ال Interface

في دروس سابقة رأينا أنه في جافا لا يمكن للكلاس العادي أن يرث من أكثر من كلاس في نفس الوقت لأنه يمكن للكلاس أن يفعل extends لكلاس واحد فقط.
من أجل ذلك عمل مطوروا لغة جافا على إبتكار نوع جديد يشبه الكلاس العادي و يسمح لنا بتطبيق مبدأ تعدد الوراثة الذي يعتبر شيء مهم جداً في لغات البرمجة. هذا النوع الجديد يسمى interface.

يستخدم الinterface كوسيط لتطوير البرامج, و المقصود هنا أن المبرمج يستخدم الinterface إذا أراد جعل برنامجه قابلاً للتطوير بكل مرونة سواءً لأجل نفسه أو من قبل مبرمجين آخرين, فهو يستخدم الinterface لإجبار المبرمجين على اتباع أسلوب محدد يضمن توافق الكودات التي سيكتبها المطورون الآخرون مع كودات البرنامج الأساسية.

إذاً الinterface يستخدم لتجهيز أسلوب يمكن السير عليه لربط الكلاسات بأسلوب سهل, منطقي و مفهوم.

الأشياء التي يمكن تعريفها بداخل الinterface

  • دوال لا تملك body, أي Abstract Method.
  • متغيرات مع إعطائهم قيمة بشكل مباشرةً عند تعريفهم. لأن أي متغير تقوم بتعرفه بداخل الإنترفيس يعتبر معرف كـ public final static بشكل تلقائي.
  • Nested Classes, أي كلاس نوعه static بداخل كلاس نوعه static.
  • Nested Interfaces, أي interface بداخل interface .

طريقة تعريف الinterface

الinterface هو في الأساس Full Abstract, لكن لا يجب وضع الكلمة abstract عند تعريفه. و لا يمكن تعريف إنترفيس كـ prviate أو protected لأنه دائماً يعتبر public حتى لو لم تضع كلمة public قبله. كما أنه لا يمكن تعريف الإنترفيس كـ final أو static لأنه تم تصميم الإنترفيس لجعل أي كلاس يرثه يفعل Override للدوال الموجودة فيه.

إذاً لتعريف interface , أكتب interface ثم ضع له أي إسم تريده.

مثال :

} interface MyInterface

{

شروط الربط بين الكلاس و الإنترفيس

  • لا يمكن إنشاء كائن من interface .
  • يستطيع الكلاس أن يرث من كلاس واحد, أي يستطيع أن يفعل extends لكلاس واحد.
  • لا يستطيع الكلاس أن يرث من interface , أي لا يستطيع أن يفعل extends لinterface .
  • يستطيع الكلاس تنفيذ interface أو أكثر, أي يستطيع أن يفعل implements لinterface أو أكثر.
  • الكلاس الذي ينفذ interface , يجب أن يفعل Override لجميع الدوال التي ورثها من هذا الinterface .
  • يستطيع الinterface أن يرث من الinterface أو أكثر. أي يستطيع الinterface أن يفعل extends لinterface أو أكثر.

تنفيذ الinterface

عند تنفيذ أي interface , يجب أن تفعل Override لجميع الدوال الموجودة فيه, و يجب تعريفهم كـ public حتى يستطيع أي كائن من هذا الكلاس أن يستخدمهم.

مثال : 

  // أي كلاس ينفذ هذا الإنترفيس يجب أن يفعل Override لجميع الدوال الموجودة فيه} interface A
;()void print
{

} class B implements
// هنا قلنا أن الكلاس A ينفذ الانترفيس B 

// الكلاس B مجبور أن يفعل Override للدالة ()print , لا تنسى إضافة كلمة public
 Override@
} ()public void print
;(“System.out.println(“B should Override this method
{
{

شروط أساسية عليك اتباعها عند إنشاء إنترفيس

  • لا تستخدم أي Access Modifer عند تعريف interface .
  • لا تستخدم أي Access Modifer عند تعريف دالة بداخل interface .
  • بداخل الinterface جميع الدوال يجب أن لا تملك body. و يمكن جعل الدالة تعمل إستثناء.
  • لا يمكن للinterface أن يملك كونستركتور.