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 जानबूझकर मल्टीपल इनहेरिटेंस का समर्थन नहीं करता, लेकिन इंटरफेस के जरिए यह एक तरह का मल्टीपल इनहेरिटेंस संभव बना देता है।
इसके अलावा, इंटरफेस के जरिए पॉलिमॉर्फिज्म लागू किया जा सकता है। यही विचार इंटरफेस की पूरी व्यवस्था का आधार है।