تعداد بازدید: 5321

interface در جاوا

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

یک کلاس می تواند یک interface را پیاده سازی یا implements کند :

در پیاده سازی یک interface باید تمامی متدهای انتزاعی داخل interface رو تعریف کنید(تمامی متدهای interface انتزاعی هستند).

class ⇒ implements ⇒ interface

در ارث بری از از کلاس از جنس abstract باید تمامی متدهای انتزاعی رو تعریف کنید.(فقط متدهای انتزاعی)

class ⇒ extends ⇒ abstract

تعریف یک interface

interface Animal :

public interface Animal {
    public void eat();
    public void sleep();
}

نکته : interface شبیه به کلاس است اما کلاس نیست ، لذا به تعریف کلمه کلیدی class نیاز نیست.

نکته : تمامی متدهای درون یک interface از نوع انتزاعی هستند لذا نیازی به نوشتن کلمه کلیدی abstract نیست.

پیاده سازی interface توسط یک کلاس ساده

class cat :

public class cat implements Animal {
    public void eat(){
        System.out.println("eating milk");
    }
    public void sleep(){
        System.out.print("cat sleeping");
    }
}

نکته : چون کلاس ساده نمی تواند متد انتزاعی داشته باشد لذا باید تمامی متدهای انتزاعی interface پیاده سازی شده را تعریف کند.

پیاده سازی interface توسط یک کلاس از جنس abstract

abstract class dog :

public abstract class dog implements Animal {
    @Override
    public void eat() {
        System.out.println("dog eating");
    }
}

نکته : چون کلاس abstract خود به تنهایی می تواند متد انتزاعی داشته باشد لذا لازم به تعریف تمامی متدهای انتزاعی interface نیست.

نکته : کلاسی که از کلاس dog ارث بری کنه باید متد تعریف نشده در interface پدربزرگش یعنی Animal رو تعریف کنه.

جمع بندی :

  • یک کلاس ساده تنها می تونه متدهای معمولی (با بدنه) رو داشته باشه.
  • یک کلاس از جنس abstract هم میتونه متد abstract (بدون بدنه) داشته باشه هم متد معمولی (با بدنه)
  • یک interface تنها میتونه متد abstract (بدون بدنه) داشته باشه.

پیاده سازی چندگانه (multi implements) در جاوا

یک کلاس قادر است که یک یا چند interface رو پیاده سازی کنه ، فقط باید در نظر داشت که تمامی متدهای تمامی interface هارو باید تعریف کنه.

مثلا قورباغه رو در نظر بگیرید که اعمال یک خرگوش و ماهی رو پیاده سازی می کنه. قورباغه دوزیست است.

کلاس rabbit :

public interface rabbit {
    public void jump();
}

کلاس fish :

public interface fish {
    public void swim();
}

کلاس forg :

public class forg implements fish,rabbit {

    @Override
    public void swim() {
        System.out.print("swimming");
    }

    @Override
    public void jump() {
        System.out.println("jumping");
    }
}

ارث بری چندگانه interface ها از هم

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

کلاس sport :

public interface sport {
     // methods
}

کلاس evant :

public interface evant {
    // methods
}

کلاس footbal :

public interface football extends sport,evant  {
    //methods
}

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

نکته : کلاسی که کلاس football رو پیاده سازی کنه باید تمامی متدهای کلاس های sport , evant , football رو تعریف کنه.

  • یک کلاس تنها از یک کلاس پدر extends میشه . (1-1)
  • یک interface از یک یا چند interface دیگه میتونه extends بشه (قطعا باید والدش هم interface باشه که تموم متدهاش از نوع انتزاعی باشن).(1-n)
  • یک کلاس می تونه از یک یا چند interface دیگه implements بشه.(1-n)

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

2 دیدگاه برای interface در جاوا

  1. استاد بسیار عالی بود به طور کامل تازه یاد گرفتم بعد از کلی اموزش خوب نفهمیده بودم
    ولی شما خیی واضح توضیح میدین متشکرم

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *