تُعدّ 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.
أعضاء الواجهة عامة افتراضيًا.
يمكن أن تحتوي الواجهات على أنواع متداخلة: interfaces وenums وclasses.
وهنا تعمل الواجهات الحاوية بمثابة فضاءات الأسماء.
ويُوصَل إلى الأنواع المتداخلة من خارج الواجهة بوضع اسم الواجهة قبلها واستخدام صيغة النقطة لتحديد العضو.
بحكم التصميم، لا تدعم Java الوراثة المتعددة، لكنها تسهّل نوعًا من الوراثة المتعددة عبر الواجهات.
علاوة على ذلك، فإن مفهوم تعدد الأشكال القابل للتحقيق عبر الواجهات هو الأساس الذي تقوم عليه آلية الواجهة.