آموزش جاوا (Java) قسمت 39 : استفاده از اینترفیس ها

با سلام به همه دوستان و همراهان Itpro. اینترفیس یک نوع در جاوا است که شبیه کلاسی است که دارای متدهای abstract است و هیچ متدی ندارد که پیاده سازی کرده باشد. اگر کلاسی بخواهد از یک اینترفیس ارث بری داشته باشد باید آن را پیاده سازی کند و از کلمه کلیدی implements استفاده کند. همانند کلاس های abstract در داخل اینترفیس می توان ثابت و متد پیش فرض و متد استاتیک و .. داشت. متدهای استاتیک را می توان در داخل اینترفیس تعریف کرد. نوشتن یک اینترفیس شبیه نوشتن یک کلاس است. اما یک کلاس ویژگی ها و رفتارهای اشیاء را شرح می دهد ولی یک اینترفیس شامل رفتارهایی است که کلاس هایی که قرار است اینترفیس را پیاده سازی کنند باید از آن رفتار ها تبعیت کنند. برخلاف کلاس ها متدهای موجود در اینترفیس در خود اینترفیس تعریف نمی شوند و کلاسی که اینترفیس را پیاده سازی می کند باید آن متدها را تعریف کند. شباهت های اینترفیس و کلاس در بخش های زیر است:

  • یک اینترفیس می تواند مانند کلاس ها به هر تعداد که می خواهد متد داشته باشد.
  • همانند کلاس ها اینترفیس ها را در داخل فایل هایی با پسوند .java می نویسیم.
  • وقتی که یک اینترفیس را کامپایل می کنیم و اصطلاحاً بایت کد به وجود می آید فایل های بایت کد با پسوند .class ساخته می شود.
  • اینترفیس ها در پکیج ها قرار دارند و بایت کد آنها در ساختار دایرکتوری متناظر قرار دارد.

تفاوتهایی که یک اینترفیس با یک کلاس دارد چندین مورد است که می توان موارد زیر را نام برد.

  • شما نمی توانید از یک اینترفیس یک شئ بسازید.
  • یک اینترفیس نمی تواند constructor داشته باشد. زیرا که نمی توان با استفاده از کلمه کلیدی new یک شئ از اینترفیس ساخت.
  • همه ی متدهای یک اینترفیس از نوع abstract می باشند و بدنه ندارند.
  • یک اینترفیس نمی تواند فیلد استاتیک داشته باشد. تنها فیلدهایی که می تواند در داخل اینترفیس وجود داشته باشد فیلد هایی هستند که باید هم به صورت final و هم به صورت static تعریف شوند.
  • یک اینترفیس را نمی توان با استفاده از کلمه کلیدی extends آورد و برای وراثت حتما باید از کلمه کلیدی implements استفاده کرد.
  • یک اینترفیس می تواند چندین اینترفیس دیگر را extend کند و از آنها ارث ببرد.

تعریف اینترفیس

در کد زیر تعریف اینترفیس آورده شده است:

/* File name : NameOfInterface.java */
import java.lang.*;
//Any number of import statements

public interface NameOfInterface
{
   //Any number of final, static fields
   //Any number of abstract method declarations\
}

اینترفیس ها مشخصات زیر را دارند.

  • یک اینترفیس به صورت ضمنی یک abstract است و لازم نیست که شما از کلمه کلیدی abstract هنگام تعریف اینترفیس استفاده کنید.
  • هر متدی که در یک اینترفیس است نیز به طور ضمنی abstract است بنابراین هنگام تعریف متدها نیازی به استفاده از کلمه کلیدی abstract نیست.
  • متدهای موجود در اینترفیس به صورت ضمنی public هستند. برای مثال به کد زیر دقت کنید:
  • /* File name : Animal.java */
    interface Animal {
    
       public void eat();
       public void travel();
    }
    
    

پیاده سازی اینترفیس ها

وقتی یک کلاس یک اینترفیس را پیاده سازی می کند شما یک قرار داد را امضا می کنید که عملیات گفته شده در اینترفیس را درون کلاس خود پیاده سازی کنید. اگر یک کلاس همه ی متدهای موجود در اینترفیس را پیاده سازی نکند باید متد مربوطه به صورت abstract معرفی شود و در غیر این صورت برنامه خطا خواهد داشت. یک کلاس برای این که یک اینترفیس را پیاده سازی نماید از کلمه کلیدی implements استفاده خواهد کرد. این کلمه کلیدی در زمان تعریف کلاس آورده می شود و مانند کد زیر خواهد بود:

/* File name : MammalInt.java */
public class MammalInt implements Animal{

   public void eat(){
      System.out.println("Mammal eats");
   }

   public void travel(){
      System.out.println("Mammal travels");
   } 

   public int noOfLegs(){
      return 0;
   }

   public static void main(String args[]){
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
} 

خروجی برنامه بالا به شکل زیر خواهد بود:

Mammal eats
Mammal travels

قوانینی برای پیاده سازی متدهای موجود در اینترفیس وجود دارد که این قوانین عبارتند از:

  • هنگام پیاده سازی متد علاوه بر exception های چک شده ای که در متد اینترفیس معرفی شده اند نباید exception دیگری را معرفی کرد.
  • در متدی که در حال پیاده سازی است تعداد آرگومان ها و نوع مقدار بازگشتی باید با تعداد آرگومان و مقدار بازگشتی متد اینترفیس یکی باشد.
  • کلاسی که قصد پیاده سازی اینترفیس را دارد می تواند خود به صورت abstract تعریف شود بنابراین نیازی نیست که متدها را پیاده سازی کند.

هنگام پیاده سازی اینترفیس ها به قوانین زیر توجه کنید:

  • یک کلاس می تواند در یک زمان چند اینترفیس را پیاده سازی نماید.
  • یک کلاس می تواند فقط از یک کلاس ارث ببرد ولی چند اینترفیس را پیاده سازی کند.
  • یک اینترفیس می تواند از اینترفیس دیگر ارث بری داشته باشد.همان طور که یک کلاس می تواند از کلاس دیگر ارث ببرد.

ارث بری اینترفیس ها

یک اینترفیس می تواند از اینترفیس دیگر ارث بری داشته باشد. با استفاده از کلمه کلیدی extends یک اینترفیس می تواند از اینترفیس دیگر ارث ببرد. در مثال زیر اینترفیس های football و hokey از اینترفیس sports ارث بری داشته اند.

//Filename: Sports.java
public interface Sports
{
   public void setHomeTeam(String name);
   public void setVisitingTeam(String name);
}

//Filename: Football.java
public interface Football extends Sports
{
   public void homeTeamScored(int points);
   public void visitingTeamScored(int points);
   public void endOfQuarter(int quarter);
}

//Filename: Hockey.java
public interface Hockey extends Sports
{
   public void homeGoalScored();
   public void visitingGoalScored();
   public void endOfPeriod(int period);
   public void overtimePeriod(int ot);
}

اینترفیس Hokey دارای 4 متد است اما این اینترفیس 2 متد را نیز از اینترفیس Sports به ارث برده است. بنابراین کلاسی که اینترفیس Hokey را پیاده سازی می کند باید 6 متد را پیاده سازی نماید. همانطور برای اینترفیس Football نیز هر کلاسی که بخواهد این اینترفیس را پیاده سازی کند باید 5 متد را پیاده سازی نماید.

ارث بری از چند اینترفیس

یک کلاس جاوا فقط می تواند از یک کلاس جاوای دیگر ارث بری داشته باشد. ارث بری چندگانه در جاوا مجاز نیست. اما اینترفیس ها این محدودیت را ندارند و می توانند از بیش از یک اینترفیس ارث بری داشته باشند. برای ارث بری اینترفیس ها از کلمه کلیدی extends استفاده می کنیم و اینترفیس های والد را با استفاده از علامت , جدا می نماییم. برای مثال به کد زیر توجه کنید:

public interface Hockey extends Sports, Event

اینترفیس های تگ

به اینترفیس هایی که هیچ متدی ندارند اینترفیس تگ می گویند. برای مثال اینترفیس MouseListener یک اینترفیس تگ است که در کتابخانه java.awt قرار دارد و از java.util.EventListener ارث بری کرده است که به صورت زیر تعریف شده است:

package java.util;
public interface EventListener
{}

استفاده از اینترفیس های بدون متد که اینترفیس تگ هم به آنها می گویند دو دلیل عمده دارد که عبارتند از:

  • ساختن یک اینترفیس والد عمومی: مانند اینترفیس EventListener که اینترفیس های زیادی از آن ارث بری کرده اند می تواند یک اینترفیس بدون متد ساخت فقط به این منظور که اینترفیس والد آن EventListener باشد. این کار برای اعمال خاصی مناسب است. برای مثال وقتی یک اینترفیس از EventListener ارث بری کرده باشد jvm تشخیص می دهد که اینترفیس مورد نظر یک رویداد را پیاده سازی خواهد کرد.
  • اضافه کردن یک نوع داده خاص به اینترفیس دیگر. این کار برای اعمال چندریختی به کار برده می شود.

Itpro باشید

نویسنده: مهدی عادلی فر

منبع: جزیره برنامه نویسی و توسعه نرم افزار وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد.

#پیاده_سازی_اینترفیس_در_جاوا #برنامه_نویسی_شی_گرا #برنامه_نویسی_جاوا #آموزش_برنامه_نویسی_جاوا #آموزش_جاوا #اینترفیس_چیست #تفاوت_اینترفیس_و_کلاس #دوره_آموزشی_جاوا #ارث_بری_در_اینترفیس_ها_در_جاوا #استفاده_از_اینترفیس_در_جاوا
عنوان
1 آموزش جاوا (Java) قسمت 1 : معرفی ، خصوصیات و شروع به کار رایگان
2 آموزش جاوا (Java) قسمت 2 : شی گرایی قسمت یک رایگان
3 آموزش جاوا (Java) قسمت 3: شی گرایی قسمت دو رایگان
4 آموزش جاوا (Java) قسمت 4 : شی گرایی قسمت سه رایگان
5 آموزش جاوا (Java) قسمت 5 : انواع داده رایگان
6 آموزش جاوا (Java) قسمت 6 : انواع متغیر رایگان
7 آموزش جاوا (Java) قسمت 7 : Modifier ها رایگان
8 آموزش جاوا (Java) قسمت 8 : عملگرها قسمت یک رایگان
9 آموزش جاوا (Java) قسمت 9 : عملگرها قسمت دو رایگان
10 آموزش جاوا (Java) قسمت 10 : حلقه های تکرار رایگان
11 آموزش جاوا (Java) قسمت 11 : عبارات شرطی رایگان
12 آموزش جاوا (Java) قسمت 12 : کلاس Wrapper اعداد رایگان
13 آموزش جاوا (Java) قسمت 12 : کلاس Wrapper اعداد رایگان
14 آموزش جاوا (Java) قسمت 14: کلاس Wrapper کاراکترها رایگان
15 آموزش جاوا (Java) قسمت 15 : کلاس String و کار با رشته قسمت یک رایگان
16 آموزش جاوا (Java) قسمت 16 : کلاس String و کار با رشته قسمت دو رایگان
17 آموزش جاوا (Java) قسمت 17 : کلاس String و کار با رشته قسمت سه رایگان
18 آموزش جاوا (Java) قسمت 18 : کلاس String و کار با رشته قسمت چهار رایگان
19 آموزش جاوا (Java) قسمت 19 : StringBuilder و StringBuffer رایگان
20 آموزش جاوا (Java) قسمت 20 : استفاده از آرایه ها رایگان
21 آموزش جاوا (Java) قسمت 21 : آموزش کار با تاریخ رایگان
22 آموزش جاوا (Java) قسمت 22 : عبارات منظم (Regular Expression) رایگان
23 آموزش جاوا (Java) قسمت 23 : تعریف و استفاده از متدها قسمت یک رایگان
24 آموزش جاوا (Java) قسمت 24 : تعریف و استفاده از متدها قسمت دو رایگان
25 آموزش جاوا (Java) قسمت 25 : کار با استریم ها و فایل ها رایگان
26 آموزش جاوا (Java) قسمت 26 : کار با دایرکتوری ها رایگان
27 آموزش جاوا (Java) قسمت 27 : کلاس ByteArrayInputStream رایگان
28 آموزش جاوا (Java) قسمت 28 : معرفی کلاس File و متدها رایگان
29 آموزش جاوا (Java) قسمت 29 : معرفی و شرح Exception ها قسمت 1 رایگان
30 آموزش جاوا (Java) قسمت 30 : معرفی و شرح Exception ها قسمت 2 رایگان
31 آموزش جاوا (Java) قسمت 31 : معرفی و شرح Exception ها قسمت 3 رایگان
32 آموزش جاوا (Java) قسمت 32 : استفاده از انوع کلاس های داخلی رایگان
33 آموزش جاوا (Java) قسمت 33 : وراثت کلاس ها و انواع آن رایگان
34 آموزش جاوا (Java) قسمت 34 : Override کردن متد ها رایگان
35 آموزش جاوا (Java) قسمت 35 : چند ریختی (Polymorphism) رایگان
36 آموزش جاوا (Java) قسمت 36 : Enum و ویژگی های آن رایگان
37 آموزش جاوا (Java) قسمت 37 : معرفی Abstract رایگان
38 آموزش جاوا (Java) قسمت 38 : استفاده از کپسول بندی (Encapsulation) رایگان
39 آموزش جاوا (Java) قسمت 39 : استفاده از اینترفیس ها رایگان
40 آموزش جاوا (Java) قسمت 40 : پکیج(Package) و نحوه استفاده رایگان
41 آموزش جاوا (Java) قسمت 41 : معرفی داده ساختارها Enumeration رایگان
42 آموزش جاوا (Java) قسمت 42 : داده ساختار BitSet رایگان
43 آموزش جاوا (Java) قسمت 43 : داده ساختار Vector رایگان
44 آموزش جاوا (Java) قسمت 44 : داده ساختار Stack (پشته) رایگان
45 آموزش جاوا (Java) قسمت 45 : داده ساختار Dictionary رایگان
46 آموزش جاوا (Java) قسمت 46 : داده ساختار Hashtable رایگان
47 آموزش جاوا (Java) قسمت 47 : داده ساختار Properites رایگان
48 آموزش جاوا (Java) قسمت 48 : معرفی و آموزش جنریک (Generic) رایگان
49 آموزش جاوا (Java) قسمت 49 : برنامه نویسی سوکت و شبکه قسمت 1 رایگان
50 آموزش جاوا (Java) قسمت 50 : برنامه نویسی سوکت و شبکه قسمت 2 رایگان
51 آموزش جاوا (Java) قسمت 51 : استفاده از Lambda Expression رایگان
52 آموزش جاوا (Java) قسمت 52 : Thread و Multi-Threading رایگان
53 آموزش جاوا (Java) قسمت 53 : Runnable در Thread و Multi-Threading رایگان
54 آموزش جاوا (Java) قسمت 54 : کلاس Thread و متدها رایگان
زمان و قیمت کل 0″ 0
1 نظر
hamid0

با سلام

اگر امکان داره،در آموزشها تون، مثالهای کاربردی بزنید تا ملموس و قابل فهم تر باشه.

ممنون از شما

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره تابستانه می تونی امروز ارزونتر از فردا خرید کنی ....