"नमस्कार, अमीगो! आज मैं आपको कारण बताना चाहता हूं कि इंटरफेस क्यों मौजूद हैं। आप अक्सर सुनते हैं कि एक निश्चित वर्ग, वस्तु, या इकाई एक विशेष इंटरफ़ेस का समर्थन करती है। इंटरफ़ेस का समर्थन करने का क्या अर्थ है? "

विशिष्ट व्यवहार का समर्थन करने के लिए इंटरफेस मौजूद हैं - 1

व्यापक अर्थ में, कोई भी इंटरफ़ेस किसी चीज़ के लिए किसी और चीज़ के साथ बातचीत करने का एक तंत्र है। उदाहरण के लिए, एक टीवी रिमोट एक रिमोट इंटरफेस है। एक कुत्ता आदेशों को समझता और निष्पादित करता है, जिसका अर्थ है कि कुत्ता एक आवाज (नियंत्रण) इंटरफ़ेस का समर्थन करता है। इसे पूरा करने के लिए, हम कह सकते हैं कि एक इंटरफ़ेस दो चीजों के बीच बातचीत करने का एक मानकीकृत तरीका है, जहाँ दोनों पक्ष मानक जानते हैं। जब कोई व्यक्ति कुत्ते को "बैठने" के लिए कहता है, तो उसका आदेश "कुत्ते की आवाज-नियंत्रण इंटरफ़ेस" का हिस्सा होता है, और यदि कुत्ता आदेश का पालन करता है, तो हम कहते हैं कि कुत्ता इंटरफ़ेस का समर्थन करता है।

तो यह प्रोग्रामिंग में है। विधियाँ किसी वस्तु पर, उसके डेटा पर की जाने वाली क्रियाएँ हैं। और यदि कोई वर्ग कुछ विधियों को लागू करता है, तो यह कुछ आदेशों के "निष्पादन का समर्थन करता है"। विधियों को एक इंटरफ़ेस में संयोजित करने से हमें क्या लाभ होता है?

1) प्रत्येक इंटरफ़ेस , एक वर्ग की तरह , एक अद्वितीय नाम है। दोनों पक्ष 100% सुनिश्चित हो सकते हैं कि दूसरा पक्ष ठीक उसी इंटरफ़ेस का समर्थन करता है जिसे वे जानते हैं और कुछ समान इंटरफ़ेस का नहीं।

2) प्रत्येक इंटरफ़ेस उस वर्ग पर कुछ प्रतिबंध लगाता है जो इसका समर्थन करने जा रहा है। वर्ग (उसका डेवलपर) यह तय करता है कि इंटरफ़ेस से विरासत में मिली विधियों को कॉल करने पर वह क्या करेगा, लेकिन परिणाम उचित अपेक्षाओं की सीमा के भीतर होना चाहिए। यदि हम एक कुत्ते को "बैठने" का आदेश देते हैं और फिर वह 5 मिनट के लिए अपनी जगह पर घूमता है और फिर बैठता है, तो यह इंटरफ़ेस का समर्थन करता है। लेकिन अगर यह आपको पैर से पकड़ लेता है, तो हम मुश्किल से कह सकते हैं कि यह इंटरफ़ेस का समर्थन करता है। कमांड को निष्पादित करने से अपेक्षित परिणाम नहीं मिला।

मान लीजिए कि आप और आपके मित्र एक कंप्यूटर गेम लिख रहे हैं। और आपको एक वर्ण के व्यवहार को प्रोग्राम करने के लिए नियुक्त किया गया है। आपके एक सहकर्मी ने स्क्रीन पर सभी वर्णों को प्रदर्शित करने के लिए पहले ही कोड लिख लिया है। एक दूसरा सहयोगी, जो गेम को डिस्क में सहेजने के लिए जिम्मेदार है, ने सभी गेम ऑब्जेक्ट्स को फ़ाइल में सहेजने के लिए कोड लिखा है। उनमें से प्रत्येक ने बहुत सारे कोड लिखे और उस कोड के साथ इंटरैक्ट करने के लिए एक इंटरफ़ेस बनाया। उदाहरण के लिए, यह ऐसा दिखाई दे सकता है:

जावा कोड विवरण
interface Saveable
{
 void saveToMap(Map<String, Object> map);
 void loadFromMap(Map<String, Object> map);
}
- किसी मानचित्र से किसी वस्तु को संग्रहीत / लोड करने के लिए इंटरफ़ेस।
interface Drawable
{
 void draw(Screen screen);
}
- पास किए गए स्क्रीन ऑब्जेक्ट के अंदर किसी ऑब्जेक्ट को खींचने के लिए इंटरफ़ेस।
class PacMan implements Saveable, Drawable
{
…
}
- आपकी कक्षा, जो दो इंटरफेस का समर्थन करती है।

दूसरे शब्दों में, किसी भी इंटरफेस (इंटरफेस के समूह) का समर्थन करने के लिए, आपकी कक्षा को चाहिए:

1) उन्हें इनहेरिट करें

2) उनमें घोषित तरीकों को लागू करें

3) विधियों को वही करना चाहिए जो वे करना चाहते थे।

फिर प्रोग्राम का बाकी कोड, जो आपकी कक्षा और उसकी वस्तुओं के बारे में कुछ नहीं जानता है, आपकी कक्षा के साथ काम कर सकता है।

"कोड मेरी कक्षा के बारे में कुछ भी क्यों नहीं जान सकता?"

"मान लें कि आपने एक प्रोग्राम से कोड लिया है जिसे किसी ने एक साल पहले लिखा था। या मान लीजिए कि आपके दोस्तों ने गेम इंजन को किसी और से खरीदा/लाइसेंस दिया है। आपके पास गेम के लिए वर्किंग कोड है। हजारों ऑब्जेक्ट जो एक दूसरे के साथ इंटरैक्ट करते हैं। और वे आसानी से आपकी वस्तुओं के साथ सही ढंग से बातचीत कर सकता है यदि आप उस बातचीत को उन इंटरफेस के माध्यम से करते हैं जिन्हें आपकी कक्षाओं ने सही ढंग से लागू किया है।"

"बहुत दूर! मुझे नहीं पता था कि यह संभव था।"

"सभी बड़े प्रोजेक्ट इसी तरह काम करते हैं। लोगों ने बहुत समय पहले स्क्रैच से लिखना बंद कर दिया था।"

लोग हर बार गणित और वर्णमाला को भी नहीं बदलते हैं। इसके बजाय, वे हर उस चीज़ का अध्ययन करते हैं जिसका आविष्कार उनसे पहले किया गया था।