interfaces راه اصلی جدا کردن استفاده از یک کلاس از پیادهسازی آن هستند.
این جداسازی، انعطافپذیری لازم برای نگهداری پیادهسازی را فراهم میکند و به پشتیبانی از رفتار جنریک نوعایمن کمک میکند.
نحوهی نگارش یک اینترفیس شبیه به یک کلاس است، با این تفاوت که متدها فقط به شکل امضا ظاهر میشوند و بدنهی آنها ارائه نمیشود.
public interface Language {
String speak();
}
public interface ItalianLanguage extends Language {
String speak();
String speakItalian();
}
public interface ScriptConverter {
void setVersion(String version);
String getVersion();
String convertCyrillicToLatin(String cyrillic);
}
کلاس پیادهساز باید همهی عملیات تعریفشده توسط اینترفیس را پیادهسازی کند.
اینترفیسها معمولاً یکی از کارهای زیر یا چند مورد از آنها را انجام میدهند:
Comparable<T>)public class ItalianTraveller implements ItalianLanguage {
public String speak() {
return "Ciao mondo";
}
public String speakItalian() {
return speak();
}
}
public class ItalianTravellerV2 implements ItalianLanguage {
public String speak() {
return "migliorata - Ciao mondo";
}
public String speakItalian() {
return speak();
}
}
public class FrenchTraveller implements Language {
public String speak() {
return "Ça va?";
}
}
public class RussianTraveller implements Language, ScriptConverter {
private String version;
public void setVersion(String version) {
this.version = version;
}
public String getVersion() {
return version;
}
public String speak()
{
return "Привет мир";
}
public String convertCyrillicToLatin(String cyrillic) {
throw new UnsupportedOperationException();
}
}
public class DocumentTranslator implements ScriptConverter {
private String version;
public void setVersion(String version) {
this.version = version;
}
public String getVersion() {
return version;
}
public String translate(String russian) {
throw new UnsupportedOperationException();
}
public String convertCyrillicToLatin(String cyrillic) {
throw new UnsupportedOperationException();
}
}
کدی که از اینترفیسها و کلاسهای بالا استفاده میکند میتواند:
اینترفیسها بهطور گسترده برای پشتیبانی از آزمون به کار میروند، چون ماک کردن را آسان میکنند.
اینترفیسها میتوانند با کلیدواژهی extend اینترفیسهای دیگر را گسترش دهند.
اعضای یک اینترفیس بهطور پیشفرض public هستند.
اینترفیسها میتوانند نوعهای تودرتو داشته باشند: interfaces، enums و classes.
در اینجا، اینترفیسهای دربرگیرنده نقش فضاینام را ایفا میکنند.
به نوعهای تودرتو از بیرون اینترفیس، با آوردن نام اینترفیس در ابتدا و استفاده از روش نوشتن با نقطه برای مشخص کردن عضو، دسترسی پیدا میشود.
طبق طراحی، Java از وراثت چندگانه پشتیبانی نمیکند، اما نوعی وراثت چندگانه را از طریق اینترفیسها امکانپذیر میسازد.
علاوه بر این، این مفهوم که چندریختی را میتوان از طریق اینترفیسها پیادهسازی کرد، زیربنای سازوکار اینترفیس است.