اینترفیس(Interface) چیست؟

*توییتر من: twitter.com/r_p_d1*** این جا تعاریف و کاربردهایی که از اینترفیس توی وبسایت ها و کتب مختلف می بینیم، جمع آوری می کنم.***تعاریف:1- راهی که قراره با اون بتوانیم به ابسترکشن در جاوا برسیم، اینترفیس است.2- اینترفیس، بلوپرینت(راهنمای) کلاس هست و دارای متدهای انتزاعی(abstract methods) و متغیرهای ثابت (static consonants)هست.پس اینترفیس ها دارای abstract method و abstract variables هستند.3- اینترفیس در جاوا راهیست برای رسیدن به abstraction که از مفاهیم OOP است.4- اینترفیس کاملا یک abstract class هستش که متد های بدون بدنه را درون خود جمع می کنه. البته از جاوا 8 و 9 قضیه فرق کرده است.5- دو راه برای رسیدن به ابسترکشن در جاوا هست: 1- ابسترکت کلاس و 2- اینترفیسکاربردها:1- برای رسیدن به abstraction2- ما می توانیم، چند وراثتی (functionality of multiple inheritance) را ایجاد کنیم. زیرا ما نمی توانیم چندتا کلاس به ارث ببریم.3- برای دستیابی به loose coupling4- یکی از اصل های مهم OOP، پنهان کردن اطلاعات است. جاوا از ابسترکشن کلاس و اینترفیس استفاده می کند. اما تفاوت مهم این دو این است که ابسترکت کلاس از چند وراثتی پشتیبانی نمی کند.شباهت های اینترفیس با کلاس:1- نام اینترفیس همان نام فایل است.2- همانند کلاس ها، هر اینترفیس می تواند یک اینترفیس دیگر را ارث بری کند.3- در هر اینترفیس بدون محدودیت می توانیم، متد بدون بدنه تعریف کنیم.4- در هر اینترفیس بدون محدودیت می توانیم، فیلد متغیر تعریف کنیم.تفاوت های اینترفیس و کلاس:1- یک کلاس بی نهایت اینترفیس را می تواند ایمپلمنت کند اما یک کلاس فقط یک کلاس دیگر را می تواند اکستنت کند. 2- متد ها درون کلاس دارای دستورات و کد در بدنه متد هستند اما در اینترفیس اغلب متد ها بدون دستور در بدنه هستند و هیچ گونه کدی در بادی اون متدها نیست. به این متد ها ابسترکت می گویند. انتزاعیند. از جاوای 8 و 9 به بعد بعضی از متدهای اینترفیس دارای کد درونشان هستند. 3- اینترفیس ها می توانند چندین اینترفیس دیگر را به ارث ببرند. اما کلاس ها فقط یک کلاس را به ارث می برند. 4- دسترسی اینترفیس ها فقط public هست. 5- از روی اینترفیس نمی توان ابجت ساخت. اما از روی کلاسی که اینترفیس را ایمپلمنت می کند می سازیم.نکته 1: variable ها در اینترفیس، static, final, public هستند.شروع ساخت یک اینترفیس:1- یکدونه اینترفیس که هم نام فایل هستش می سازیم. با حرف بزرگ می نویسیمش.interface ln1{ }حالا یه وریبل(متغیر) بش اضافه می کنیم. مثلا یک متغیر از نوع فاینال و دیتا تایپ int با نام id و مقدار 10. ضمنا یه متدی هم بش اضافه می کنیم. متد () display که چیزی برنمی گردونه.متد دیزپلی توی اینترفیس نمی گه چطوری انجام می دهد.interface ln1{ final int id = 10;void display();}حالا یک کلاس می سازیم و این اینترفیس رو ایمپلمنت می کنیم. این جا توی این کلاس به متد می گیم چه کارایی باید انجام بدهد. مثلا اینجا داره می گه کلمه geek رو چاپ کن.class test implements ln1{ public void display() { System.out.println(&quotGeek&quot); }}حالا می رویم توی کلاس اصلی و از کلاس test که ساختیم ابتدا یک شی می سازیم. سپس از اون شی که t هستش، متدهای کلاس براش تعریف می شوند و ما استفاده می کنیم.دستور t.display () n برای ما کلمه geek را چاپ می کند و هم چنین وریبل id که مقدارش 10 هستش.public static void main (String[] args){test t = new test();t.display();System.out.println(id);}خروجی کد رو در زیر می بینیم.Geek 10نکته: همه این ها را در یک کلاس کلی میشه نوشت اما ما دوست داریم کار تمیز باشه برای همین جداش می کنیم که خواندن کد راحت تر باشد.این کد همه چیز توی یه فایل هستش.// Java program to demonstrate working of// interface.import java.io.*;// A simple interfaceinterface In1{// public, static and finalfinal int a = 10;// public and abstractvoid display();}// A class that implements the interface.class Test implements In1{// Implementing the capabilities of// interface.public void display(){System.out.println(&quotGeek&quot);}// Driver Codepublic static void main (String[] args){ Test t = new Test();t.display();System.out.println(a);}}منابع:https://b2n.ir/q05188https://b2n.ir/n95938