رابط جاوا(Java Interface)


یک راه دیگر برای دستیابی به انتزاع در جاوا، رابط‌ها است.


یک رابط یک "کلاس انتزاعی" است
که برای گروه بندی متدهای مرتبط با بدنه های خالی استفاده می شود:




مثال


// interface
interface Animal {
  public void animalSound(); // interface method (does not have a body)
  public void run(); // interface method (does not have a body)
}



برای دسترسی به روش های رابط، رابط باید "پیاده سازی" شود
(مثلاً به ارث رسیده است) توسط کلاس دیگری با Implements
کلمه کلیدی (به جای extends). بدن از
متد رابط توسط کلاس "implement" ارائه می شود:



مثال


// Interface
interface Animal {
  public void animalSound(); // interface method (does not have a body)
  public void sleep(); // interface method (does not have a body)
}

// Pig "implements" the Animal interface
class Pig implements Animal {
  public void animalSound() {
    // The body of animalSound() is provided here
    System.out.println("The pig says: wee wee");
  }
  public void sleep() {
    // The body of sleep() is provided here
    System.out.println("Zzz");
  }
}

class MyMainClass {
  public static void main(String[] args) {
    Pig myPig = new Pig();  // Create a Pig object
    myPig.animalSound();
    myPig.sleep();
  }
}






یادداشت ها در مورد رابط ها:



  • مانند کلاس‌های انتزاعی، رابط‌ها نمی‌توانند برای ایجاد اشیا استفاده شوند (در مثال بالا،
    امکان ایجاد یک شی "Animal" در MyMainClass وجود ندارد)

  • روش های رابط بدنه ندارند - the
    بدنه توسط کلاس "implement"
  • ارائه می شود
  • در اجرای یک رابط، باید همه روش‌های آن را لغو کنید

  • روش های رابط به طور پیش فرض انتزاعی هستند و
    عمومی

  • ویژگی های رابط به طور پیش فرض عمومی هستند،
    ایستا و نهایی

  • یک رابط نمی تواند حاوی سازنده باشد (زیرا نمی توان از آن برای ایجاد اشیا استفاده کرد)



چرا و چه زمانی از رابط ها استفاده کنیم؟


1) برای دستیابی به امنیت - جزئیات خاصی را پنهان کنید و فقط موارد مهم را نشان دهید
جزئیات یک شی (رابط).


2) جاوا از "وارثت چندگانه" پشتیبانی نمی کند (یک کلاس فقط می تواند از یک سوپرکلاس ارث بری کند). با این حال، می توان به آن دست یافت
با رابط‌ها، زیرا کلاس می‌تواند چندین رابط را پیاده‌سازی کند.
توجه: برای پیاده سازی چند رابط، آنها را با کاما جدا کنید (به مثال زیر مراجعه کنید).