मुख्य सामग्री पर जाएं
मॉड्यूल 4 · पाठ 1 का 2पाठ्यक्रम में 7/14~15 min
मॉड्यूल पाठ (1/2)

इंटरफ़ेस

जबकि अमूर्त वर्गों में आंशिक रूप से कार्यान्वित कोड और इंस्टेंस फ़ील्ड दोनों शामिल हो सकते हैं, जावा में इंटरफ़ेस शुद्ध व्यवहार के अनुबंध हैं। एक इंटरफ़ेस परिभाषित करता है कि एक वर्ग को क्या करने में सक्षम होना चाहिए, लेकिन यह नहीं कि वह यह कैसे करता है।

यह संचालन की परिभाषा और उनके वास्तविक कार्यान्वयन के बीच पूर्ण अलगाव की अनुमति देता है।

एक इंटरफ़ेस परिभाषित करना (interface)

हम interface कीवर्ड का उपयोग करते हैं। इंटरफ़ेस में घोषित सभी विधियाँ अंतर्निहित रूप से public और abstract हैं (इसे निर्दिष्ट करने की कोई आवश्यकता नहीं है):

Java
interface Drivable {
    void startEngine();
    void stopEngine();
}

एक इंटरफ़ेस लागू करना (implements)

एक वर्ग implements कीवर्ड का उपयोग करके एक इंटरफ़ेस लागू करता है और सभी परिभाषित तरीकों के लिए कार्यान्वयन (एक निकाय के साथ) प्रदान करना आवश्यक है:

Java
class Motorcycle implements Drivable {
    @Override
    public void startEngine() {
        System.out.println("Rombo del motore acceso!");
    }

    @Override
    public void stopEngine() {
        System.out.println("Motore spento.");
    }
}

इंटरफ़ेस के लाभ

  1. एकाधिक वंशानुक्रम: जावा में, एक वर्ग केवल एक मूल वर्ग (एकल वंशानुक्रम) का विस्तार कर सकता है, लेकिन यह एक ही समय में एकाधिक इंटरफेस को लागू कर सकता है।
    Java
    class HybridCar implements Drivable, Chargeable { ... }
  2. डिकॉउलिंग: आप इंटरफ़ेस प्रकार का उपयोग करके वेरिएबल्स को परिभाषित कर सकते हैं। कोई भी ऑब्जेक्ट जो उस इंटरफ़ेस को लागू करता है उसे ऐसे वेरिएबल को सौंपा जा सकता है।
    Java
    Drivable vehicle = new Motorcycle();
    vehicle.startEngine();

इंटरफेस में स्थिरांक

इंटरफेस में, फ़ील्ड घोषित करना संभव है। ये फ़ील्ड अंतर्निहित रूप से public static final (अर्थात वर्ग स्थिरांक) हैं, भले ही आप इन संशोधकों को निर्दिष्ट न करें। नतीजतन, उन्हें घोषणा के तुरंत बाद आरंभ किया जाना चाहिए:

Java
interface PhysicsConstants {
    double GRAVITY = 9.81; // Implicitly public static final
}

डिफ़ॉल्ट तरीके (default)

जावा 8 से शुरू करके, default कीवर्ड का उपयोग करके इंटरफ़ेस के अंदर डिफ़ॉल्ट कार्यान्वयन के साथ तरीकों को परिभाषित करना संभव है। ये विधियाँ कार्यान्वयन वर्गों को उन्हें ओवरराइड करने के लिए बाध्य नहीं करती हैं, फ़ॉलबैक व्यवहार प्रदान करती हैं:

Java
interface Logger {
    void log(String message);

    // Default method with a body
    default void logError(String message) {
        log("ERROR: " + message);
    }
}

खुद कोशिश करना

व्यायाम#java.m4.l1.e1
प्रयास: 0लोड हो रहा है...

शून्य फ्लाई() विधि के साथ एक फ्लाईएबल इंटरफ़ेस बनाएं। फिर एक बर्ड क्लास लागू करें जो फ्लाईएबल लागू करता है और स्क्रीन पर फ्लाइंग प्रिंट करता है।

संपादक लोड हो रहा है...
संकेत दिखाएँ

फ्लाईएबल में, `voidfly();` लिखें। बर्ड क्लास में, इसे `@ओवरराइड पब्लिक वॉयड फ्लाई() { System.out.println('Flying'); से चिह्नित करने की विधि लागू करें; }`.

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#java.m4.l1.e2
प्रयास: 0लोड हो रहा है...

शून्य ड्रा() विधि के साथ एक ड्राएबल इंटरफ़ेस को परिभाषित करें। फिर एक रेक्टेंगल क्लास लागू करें जो ड्रॉएबल को लागू करता है और ड्रॉइंग रेक्टेंगल को प्रिंट करता है।

संपादक लोड हो रहा है...
संकेत दिखाएँ

इंटरफ़ेस में `void Draw();` को परिभाषित करें। रेक्टेंगल में, `@Override सार्वजनिक शून्य ड्रा() { System.out.println('ड्राइंग रेक्टेंगल') का उपयोग करें; }`.

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#java.m4.l1.e3
प्रयास: 0लोड हो रहा है...

शून्य तैराकी() विधि को परिभाषित करके तैराकी योग्य इंटरफ़ेस को पूरा करें। फिर, डक क्लास को पूरा करें ताकि यह फ्लाईएबल और स्विमेबल दोनों को लागू कर सके, फ्लाई() विधि में फ्लाइंग और स्विम() विधि में स्विमिंग प्रिंट कर सके।

संपादक लोड हो रहा है...
संकेत दिखाएँ

स्विमेबल के अंदर `void swim();` घोषित करें। `क्लास डक इम्प्लीमेंट्स फ्लाईएबल, स्विमेबल` घोषित करें और अनुरोधित स्ट्रिंग्स को प्रिंट करने के दोनों तरीकों को लागू करें।

3 प्रयासों के बाद समाधान उपलब्ध है