در جاوا، interface (اینترفیس) یک نوع خاص از کلاس است که به طور کامل انتزاعی است و فقط شامل تعاریف متدها (بدون بدنه) و ثابتها (فیلدهای ثابت) میباشد. اینترفیسها برای تعریف یک قرارداد یا رابط استفاده میشوند که کلاسهای دیگر باید از آن پیروی کنند.
تعریف یک اینترفیس
برای تعریف یک اینترفیس، از کلیدواژه interface استفاده میشود. در زیر یک مثال ساده از یک اینترفیس به نام Animal آورده شده است:
// از جاوا 8 به بعد: متدهای پیشفرض با بدنه
default void sleep() {
System.out.println("The animal is sleeping.");
}
// از جاوا 8 به بعد: متدهای استاتیک با بدنه
static void breathe() {
System.out.println("All animals breathe.");
}
}
پیادهسازی یک اینترفیس
کلاسی که یک اینترفیس را پیادهسازی میکند، باید تمامی متدهای abstract آن را پیادهسازی کند. اگر کلاسی متدهای پیشفرض (default) را پیادهسازی نکند، از نسخه پیشفرض آنها استفاده میشود.
public class Dog implements Animal {
// پیادهسازی متد abstract
@Override
public void makeSound() {
System.out.println("Bark");
}
}
public class Main {
public static void main(String[] args) {
// ایجاد نمونهای از کلاس Dog
Animal myDog = new Dog();
myDog.makeSound(); // خروجی: Bark
myDog.sleep(); // خروجی: The animal is sleeping. (استفاده از متد پیشفرض)
Animal.breathe(); // خروجی: All animals breathe. (متد استاتیک)
}
}
نکات کلیدی در مورد اینترفیسها:
متدهای abstract: متدهایی که در اینترفیس تعریف میشوند و بدنهای ندارند. این متدها باید توسط کلاسهایی که این اینترفیس را پیادهسازی میکنند، پیادهسازی شوند.
متدهای پیشفرض (default): این متدها دارای بدنه هستند و کلاسهای پیادهسازیکننده میتوانند آنها را بازنویسی (override) کنند یا از نسخه پیشفرض استفاده کنند.
متدهای استاتیک: این متدها میتوانند در اینترفیسها تعریف شوند و دارای بدنه هستند. آنها فقط از طریق نام اینترفیس قابل دسترسی هستند.
تعدد اینترفیسها: یک کلاس میتواند چندین اینترفیس را پیادهسازی کند و باید تمامی متدهای آنها را پیادهسازی کند.
ثابتها (فیلدهای ثابت): فیلدهای تعریف شده در اینترفیس به طور پیشفرض public, static, و final هستند.
تفاوتهای کلیدی بین کلاس abstract و interface:
ارثبری چندگانه: یک کلاس میتواند از چندین اینترفیس پیروی کند ولی فقط از یک کلاس abstract ارثبری کند.
فیلدها: اینترفیسها فقط میتوانند شامل فیلدهای ثابت (static final) باشند، در حالی که کلاسهای abstract میتوانند شامل متغیرهای نمونه (instance variables) باشند.
روش پیادهسازی متدها: اینترفیسها تا جاوا 8 فقط شامل متدهای abstract بودند، ولی از جاوا 8 به بعد میتوانند شامل متدهای پیشفرض و استاتیک نیز باشند. کلاسهای abstract میتوانند شامل متدهای abstract و غیر-abstract باشند.
در جاوا، interface (اینترفیس) یک نوع خاص از کلاس است که به طور کامل انتزاعی است و فقط شامل تعاریف متدها (بدون بدنه) و ثابتها (فیلدهای ثابت) میباشد. اینترفیسها برای تعریف یک قرارداد یا رابط استفاده میشوند که کلاسهای دیگر باید از آن پیروی کنند.
تعریف یک اینترفیس برای تعریف یک اینترفیس، از کلیدواژه interface استفاده میشود. در زیر یک مثال ساده از یک اینترفیس به نام Animal آورده شده است:
public interface Animal { void makeSound(); // متد abstract (بدون بدنه)
}
پیادهسازی یک اینترفیس کلاسی که یک اینترفیس را پیادهسازی میکند، باید تمامی متدهای abstract آن را پیادهسازی کند. اگر کلاسی متدهای پیشفرض (default) را پیادهسازی نکند، از نسخه پیشفرض آنها استفاده میشود.
public class Dog implements Animal { // پیادهسازی متد abstract @Override public void makeSound() { System.out.println("Bark"); } }
public class Main { public static void main(String[] args) { // ایجاد نمونهای از کلاس Dog Animal myDog = new Dog(); myDog.makeSound(); // خروجی: Bark myDog.sleep(); // خروجی: The animal is sleeping. (استفاده از متد پیشفرض) Animal.breathe(); // خروجی: All animals breathe. (متد استاتیک) } }
نکات کلیدی در مورد اینترفیسها: متدهای abstract: متدهایی که در اینترفیس تعریف میشوند و بدنهای ندارند. این متدها باید توسط کلاسهایی که این اینترفیس را پیادهسازی میکنند، پیادهسازی شوند. متدهای پیشفرض (default): این متدها دارای بدنه هستند و کلاسهای پیادهسازیکننده میتوانند آنها را بازنویسی (override) کنند یا از نسخه پیشفرض استفاده کنند. متدهای استاتیک: این متدها میتوانند در اینترفیسها تعریف شوند و دارای بدنه هستند. آنها فقط از طریق نام اینترفیس قابل دسترسی هستند. تعدد اینترفیسها: یک کلاس میتواند چندین اینترفیس را پیادهسازی کند و باید تمامی متدهای آنها را پیادهسازی کند. ثابتها (فیلدهای ثابت): فیلدهای تعریف شده در اینترفیس به طور پیشفرض public, static, و final هستند. تفاوتهای کلیدی بین کلاس abstract و interface: ارثبری چندگانه: یک کلاس میتواند از چندین اینترفیس پیروی کند ولی فقط از یک کلاس abstract ارثبری کند. فیلدها: اینترفیسها فقط میتوانند شامل فیلدهای ثابت (static final) باشند، در حالی که کلاسهای abstract میتوانند شامل متغیرهای نمونه (instance variables) باشند. روش پیادهسازی متدها: اینترفیسها تا جاوا 8 فقط شامل متدهای abstract بودند، ولی از جاوا 8 به بعد میتوانند شامل متدهای پیشفرض و استاتیک نیز باشند. کلاسهای abstract میتوانند شامل متدهای abstract و غیر-abstract باشند.