رابط(Interface)
Interface : قراردادی است برای یک سرویس گیرنده(برنامه نویس client) , که نحوه رفتار یک کلاس را تضمین خواهد کرد. Interface یک مجموعه از متد های Abstract می باشد. کلاسی که یک Interface را پیاده سازی می کند(Implement) در حقیقت متد های Abstract آن Interface را ارث بری کرده است. یک Interface یک کلاس نیست ولی شبیه به یک کلاس است. دوتفاوت اصلی بین اینترفیس و کلاس وجود دارد: 1. یک کلاس صفت ها(Attribute)(همان state و فیلد) و رفتارهای(Behavior) یک شی را توصیف می کند. 2. یک اینترفیس شامل رفتار هایی(متدها) می شود که یک کلاس باید پیاده سازی کند.
یک اینترفیس صرفا اعضایی را که باید توسط یک کلاس پیاده سازی شوند را تعریف می کند و شامل هیچ گونه پیاده سازی نیست. اینترفیس برای یک کلاس انتزاعی, جهت ایجاد قراردادهایی مابین این کلاس انتزاعی و سرویس گیرنده هایش(فرزند های این کلاس) , یک چاره پیشنهاد می کند.
شباهت های یک اینترفیس و یک کلاس:
- یک اینترفیس می تواند شامل متد هم باشد.
- یک اینترفیس در یک فایل .java* نوشته می شود.
- Bytecode اینترفیس در یک کلاس .java* قرار می گیرد.
- اینترفیس در یک Package قرار می گیرد.
تفاوت های یک اینترفیس و یک کلاس :
- اینترفیس قابل نمونه سازی(Instantiate) نیست.
- اینترفیس سازنده(Constructor) نمی تواند داشته باشد.
- همه متد ها در اینترفیس, فقط باید Abstract باشند.
- اینترفیس نمی تواند شامل Instance Field(Variable) باشد. فقط می تواند فیلدی را شامل شود که بصورت Static و final اعلان شده باشد.
- یک اینترفیس نمی تواند از یک کلاس ارث بری کند(یک کلاس یک اینترفیس را پیاده سازی می کند).
- یک اینترفیس می تواند چند اینترفیس را توسعه و بسط (extend)دهد(از چند اینترفیس ارث بری کند).
نحو کلی اینترفیس :
مثال تعریف یک اینترفیس :
پیاده سازی اینترفیس Animal توسط کلاس MammalInt :
و خروجی آن :
در حین کار با اینترفیس ها نکات زیر را باید در نظر گرفت :
- یک اینترفیس به طور ضمنی(Implicit) از نوع Abstract می باشد و نیازی به ذکر صریح کلمه کلیدی abstract در اعلان اینترفیس نیست.
- هر متد در اینترفیس نیز به طور ضمنی Abstract می باشد و نیازی به استفاده صریح(Explicit) از کلمه کلیدی abstract در امضاء متد نیست.
- متد ها در اینترفیس به صورت ضمنی public هستند.
- در حین override کردن متد های اینترفیس , باید امضاء متد(Method Signature) و نوع بازگشتی(Return Type) متد تغییر نکند.
- یک کلاس می تواند از چند اینترفیس ارث بری کند(چند اینترفیس را پیاده سازی(implement) کند).
- یک کلاس می تواند فقط از یک کلاس ارث بری کند(می تواند فقط یک کلاس را توسعه(extend) دهد).
- یک اینترفیس می تواند از چند اینترفیس ارث بری کند(چند اینترفیس را پیاده سازی(implement) کند).
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.