واسط (جاوا)

واسطها (به انگلیسی: Interface) در جاوا یک نوع انتزاعی از اشیاء هستند که برای مشخص نمودن رفتارهایی که از رده خاصی از اشیاء انتظار می‌رود، تعریف می‌شوند. به بیان دیگر یک واسط مجموعه رفتارهای مورد انتظار از یک کلاس را تعریف می‌کند. این رفتارها به‌طور کلی قابل پیاده‌سازی نیستند و لازم است که بسته به کلاس و کاربرد پیاده‌سازی شوند. نوع انتزاعی واسط شبیه به پروتکل‌ها هستند. واسط‌ها با کلمه کلیدی interface مشخص می‌شوند. واسط‌ها تا قبل از نسخه ۸ جاوا اغلب شامل امضاء متدهای مورد انتظار (و گاهی تعریف متغیرهای ثابت (final) یا ایستا (static)) بودند. متدهایی که درون واسط تعریف می‌شوند پیاده‌سازی (بدنه متد) ندارند. اما از بعد از نسخه ۸ به بعد، متدهای ایستا و default را می‌توان در بدنهٔ واسط‌ها پیاده‌سازی نمود.

نحوه تعریف واسط 
برای تعریف یک واسط در جاوا بر اساس قاعدهٔ زیر رفتار کنید:

 [visibility] interface InterfaceName [extends other interfaces] {
  constant declarations
  abstract method declarations
 }

بر اساس قالب فوق یک واسط جاوا به صورت زیر قابل تعریف است:

public interface Predator {
       boolean chasePrey(Prey p);
       void eatPrey(Prey p);
}

پیاده‌سازی واسط توسط یک کلاس 
برای استفاده از امکانات واسط در کلاس نوشته شده باید به کامپایلر اعلان شود که می‌خواهیم واسط مورد نظر را در کلاس جاری پیاده‌سازی کنید این کار به روش مثال زیر با استفاده از کلمه کلیدی implements بعد از اسم کلاس انجام می‌شود.

public class Lion implements Predator {

        @Override
        public boolean chasePrey(Prey p) {
               // programming to  chase prey p (specifically for a lion)
        }

        @Override
        public void eatPrey(Prey p) {
               // programming to eat prey p (specifically for a lion)
        }
}

همان‌طور که مشاهده می‌شود در کلاسی که یک واسط را پیاده‌سازی می‌کنیم ضروری است که تمام متدهای معرفی شده در واسط را پیاده‌سازی کنیم در غیر اینصورت خطای نحوی رخ خواهد داد.

یک کلاس می‌تواند چندین واسط را به صورت همزمان پیاده‌سازی کند و این کار در جاوا مجاز است. مثال زیر را ببینید:

 public class Frog implements Predator, Prey { ... }

منابع 

برنامه‌نویسی شیءگرا
جاوا (زبان برنامه‌نویسی)
جاوا
واسط‌ها