Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

Java में इंटरफेस क्यों पेश किए गए?


  • एक इंटरफेस एक अनुबंध (contract) है जो बताता है कि क्लास क्या कर सकती है।
  • जब कोई क्लास इंटरफेस को इम्प्लीमेंट करती है, तो यह इंटरफेस में घोषित सभी एब्स्ट्रैक्ट मेथड्स का कार्यान्वयन प्रदान कर सकती है। एक इंटरफेस सामान्य व्यवहारों (common behaviors) का एक सेट परिभाषित करता है। इंटरफेस को इम्प्लीमेंट करने वाली क्लासेज इन व्यवहारों से सहमत होती हैं और व्यवहारों के लिए अपना कार्यान्वयन प्रदान करती हैं।
  • इंटरफेस के मुख्य उपयोगों में से एक दो ऑब्जेक्ट्स के बीच संचार अनुबंध (communication contract) प्रदान करना है।
  • यदि हम जानते हैं कि कोई क्लास एक इंटरफेस को इम्प्लीमेंट करती है, तो हम जानते हैं कि उस क्लास में उस इंटरफेस में घोषित मेथड्स के ठोस कार्यान्वयन (concrete implementations) हैं और हम इन मेथड्स को सुरक्षित रूप से इनवोक करने की गारंटी रखते हैं। दूसरे शब्दों में, दो ऑब्जेक्ट्स अपने विशिष्ट कार्यान्वयन के बजाय इंटरफेस में परिभाषित अनुबंध के आधार पर संचार कर सकते हैं।
  • Java मल्टीपल इनहेरिटेंस (multiple inheritance) को सपोर्ट नहीं करता। मल्टीपल इनहेरिटेंस हमें एक से अधिक डायरेक्ट सुपरक्लास से सबक्लास प्राप्त करने की अनुमति देता है। यह समस्या पैदा करता है यदि दो डायरेक्ट सुपरक्लास में विरोधाभासी कार्यान्वयन हों। Java इसे एक से अधिक इंटरफेस इम्प्लीमेंट करने की अनुमति देकर हल करता है।
  • चूंकि इंटरफेस में केवल एब्स्ट्रैक्ट मेथड्स होते हैं (वास्तविक कार्यान्वयन के बिना), मल्टीपल इंटरफेस के बीच कोई विरोध उत्पन्न नहीं हो सकता।

इंटरफेस के प्रमुख उद्देश्य

1. अनुबंध परिभाषित करना (Define Contract)

इंटरफेस "क्या" (WHAT) परिभाषित करता है, "कैसे" (HOW) नहीं। यह API डिजाइन का मूल सिद्धांत है।

2. मल्टीपल इम्प्लीमेंटेशन सक्षम करना (Multiple Implementations)

interface PaymentProcessor {
    void processPayment(double amount);
}

class CreditCardProcessor implements PaymentProcessor { ... }
class PayPalProcessor implements PaymentProcessor { ... }
class UPIProcessor implements PaymentProcessor { ... }

3. लूज कपलिंग (Loose Coupling)

// खराब: टाइट कपलिंग
class OrderService {
    private CreditCardProcessor processor = new CreditCardProcessor(); // कंक्रीट क्लास पर निर्भर
}

// अच्छा: लूज कपलिंग
class OrderService {
    private PaymentProcessor processor; // इंटरफेस पर निर्भर
    
    public OrderService(PaymentProcessor processor) {
        this.processor = processor; // डिपेंडेंसी इंजेक्शन
    }
}

4. मल्टीपल इम्प्लीमेंटेशन (Multiple Implementation) - Java का मल्टीपल इनहेरिटेंस विकल्प

interface Flyable { void fly(); }
interface Swimmable { void swim(); }

class Duck implements Flyable, Swimmable { // एक से अधिक इंटरफेस
    public void fly() { ... }
    public void swim() { ... }
}

5. पॉलीमॉर्फिज्म और एक्सटेंसिबिलिटी

  • नए कार्यान्वयन मौजूदा कोड को बदले बिना जोड़े जा सकते हैं (Open/Closed Principle)।
  • टेस्टिंग के लिए मॉक इम्प्लीमेंटेशन आसानी से बनाए जा सकते हैं।

इंटरफेस vs एब्स्ट्रैक्ट क्लास

विशेषताइंटरफेसएब्स्ट्रैक्ट क्लास
मल्टीपल इम्प्लीमेंटेशनहां (implements)नहीं (extends केवल एक)
स्टेट (फील्ड्स)केवल static final कॉन्स्टेंट्सइंस्टेंस वेरिएबल्स हो सकते हैं
कंस्ट्रक्टरनहींहां
एक्सेस मॉडिफायरसभी मेथड्स public (डिफ़ॉल्ट)कोई भी
उद्देश्यक्षमता/अनुबंध परिभाषित करनाआम कोड/स्टेट साझा करना

आधुनिक Java (8+) में इंटरफेस

  • डिफ़ॉल्ट मेथड्स: कार्यान्वयन के साथ मेथड्स (बैकवर्ड कम्पैटिबिलिटी के लिए)।
  • स्टेटिक मेथड्स: यूटिलिटी मेथड्स इंटरफेस में।
  • प्राइवेट मेथड्स (Java 9+): डिफ़ॉल्ट/स्टेटिक मेथड्स के लिए हेल्पर मेथड्स।

निष्कर्ष: इंटरफेस Java में अब्स्ट्रैक्शन, पॉलीमॉर्फिज्म, लूज कपलिंग और मल्टीपल इम्प्लीमेंटेशन को सक्षम करने का प्राथमिक तंत्र है। वे "क्लास क्या करती है" बनाम "क्लास कैसे करती है" को अलग करते हैं।

  1. Java में AWT कंपोनेंट्स हैवी-वेट जबकि Swing कंपोनेंट्स लाइट-वेट क्यों हैं? Java में AWT कंपोनेंट्स हैवी-वेट जबकि Swing कंपोनेंट्स लाइट-वेट क्यों हैं?

    AWT का अर्थ Abstract Window ToolKit है और यह Java GUI प्रोग्रामिंग को सपोर्ट करता है। यह स्टैंड-अलोन Java एप्लिकेशन्स/एप्लेट्स के लिए एक पोर्टेबल GUI लाइब्रेरी है। AWT हमारे एप्लिकेशन और नेटिव GUI के बीच कनेक्शन प्रदान करता है जबकि Java Swing GUI कंपोनेंट्स का एक सेट इम्प्लीमेंट करता है जो AWT तकन

  1. - Java 8 में इंटरफेस संवर्द्धन (Interface Enhancements)

    Java 8 इंटरफेस में डिफ़ॉल्ट मेथड कार्यान्वयन की एक नई अवधारणा पेश करता है। यह क्षमता बैकवर्ड कम्पैटिबिलिटी के लिए जोड़ी गई है ताकि पुराने इंटरफेस Java 8 की लैम्ब्डा एक्सप्रेशन क्षमता का लाभ उठा सकें। उदाहरण के लिए, List या Collection इंटरफेस में forEach मेथड डिक्लेरेशन नहीं है। इस तरह के मेथड को ज

  1. - Java में इंटरफेस (Interface)

    एक इंटरफेस Java में एक रेफरेंस टाइप है। यह एक क्लास के समान है। यह एब्स्ट्रैक्ट मेथड्स का एक संग्रह है। एक क्लास इंटरफेस को इम्प्लीमेंट करती है, जिससे इंटरफेस के एब्स्ट्रैक्ट मेथड्स विरासत में मिलते हैं। एब्स्ट्रैक्ट मेथड्स के साथ, एक इंटरफेस में कॉन्स्टेंट्स, डिफ़ॉल्ट मेथड्स, स्टेटिक मेथड्स, और न