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

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


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

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

एक इंटरफेस लिखना एक क्लास लिखने के समान है। लेकिन एक क्लास एक ऑब्जेक्ट के गुणों और व्यवहारों का वर्णन करती है। और एक इंटरफेस उन व्यवहारों को समाहित करता है जिन्हें एक क्लास इम्प्लीमेंट करती है।

जब तक कि इंटरफेस को इम्प्लीमेंट करने वाली क्लास एब्स्ट्रैक्ट न हो, इंटरफेस के सभी मेथड्स को क्लास में परिभाषित किया जाना चाहिए।

इंटरफेस एक क्लास के समान कैसे है?

  • एक इंटरफेस में किसी भी संख्या में मेथड्स हो सकते हैं।
  • एक इंटरफेस .java एक्सटेंशन वाली फाइल में लिखा जाता है, जिसका नाम इंटरफेस के नाम से मेल खाता है।
  • एक इंटरफेस का बाइट कोड .class फाइल में दिखाई देता है।
  • इंटरफेसेस पैकेज में दिखाई देते हैं, और उनकी संबंधित बाइटकोड फाइल एक डायरेक्टरी संरचना में होनी चाहिए जो पैकेज नाम से मेल खाती हो।

हालांकि, एक इंटरफेस कई मायनों में एक क्लास से अलग है:

  • आप एक इंटरफेस को इंस्टेंशिएट नहीं कर सकते।
  • एक इंटरफेस में कोई कंस्ट्रक्टर नहीं होता।
  • एक इंटरफेस के सभी मेथड्स एब्स्ट्रैक्ट होते हैं (Java 7 तक)।
  • एक इंटरफेस इंस्टेंस फील्ड्स नहीं रख सकता। केवल वे फील्ड्स जो static और final दोनों घोषित हैं, इंटरफेस में दिखाई दे सकते हैं।
  • एक इंटरफेस को क्लास द्वारा एक्सटेंड नहीं किया जाता; यह क्लास द्वारा इम्प्लीमेंट किया जाता है।
  • एक इंटरफेस एकाधिक इंटरफेसेस को एक्सटेंड कर सकता है।

इंटरफेस घोषित करना (Declaring Interfaces)

interface कीवर्ड का उपयोग इंटरफेस घोषित करने के लिए किया जाता है। यहां एक इंटरफेस घोषित करने का एक सरल उदाहरण है:

उदाहरण

/* File name : NameOfInterface.java */
import java.lang.*; // कितने भी इम्पोर्ट स्टेटमेंट्स
public interface NameOfInterface {
    // कितने भी final, static फील्ड्स
    // कितने भी एब्स्ट्रैक्ट मेथड डिक्लेरेशन्स
}

पूर्ण उदाहरण

// फाइल: Drawable.java
package shapes;

public interface Drawable {
    // कॉन्स्टेंट्स
    String DEFAULT_COLOR = "BLACK"; // public static final
    
    // एब्स्ट्रैक्ट मेथड्स
    void draw();
    double getArea();
    
    // डिफ़ॉल्ट मेथड (Java 8+)
    default void printInfo() {
        System.out.println("Drawing shape with color: " + DEFAULT_COLOR);
    }
    
    // स्टेटिक मेथड (Java 8+)
    static Drawable createCircle(double radius) {
        return new Circle(radius);
    }
}

// फाइल: Circle.java
package shapes;

public class Circle implements Drawable {
    private double radius;
    
    public Circle(double radius) {
        this.radius = radius;
    }
    
    @Override
    public void draw() {
        System.out.println("Drawing circle with radius: " + radius);
    }
    
    @Override
    public double getArea() {
        return Math.PI * radius * radius;
    }
}

// उपयोग
public class Main {
    public static void main(String[] args) {
        Drawable circle = Drawable.createCircle(5.0); // स्टेटिक फैक्टरी
        circle.draw();
        System.out.println("Area: " + circle.getArea());
        circle.printInfo(); // डिफ़ॉल्ट मेथड
    }
}

इंटरफेस एक्सटेंड करना

interface Base {
    void baseMethod();
}

interface Extended extends Base, AnotherInterface {
    void extendedMethod();
    
    // Base के मेथड को डिफ़ॉल्ट के साथ ओवरराइड
    @Override
    default void baseMethod() {
        System.out.println("Extended base");
    }
}

फंक्शनल इंटरफेस (Java 8+)

सिंगल एब्स्ट्रैक्ट मेथड (SAM) वाला इंटरफेस - लैम्ब्डा एक्सप्रेशंस के लिए लक्ष्य।

@FunctionalInterface
interface Calculator {
    int calculate(int a, int b);
}

// उपयोग
Calculator add = (a, b) -> a + b;
Calculator multiply = (a, b) -> a * b;
System.out.println(add.calculate(5, 3)); // 8

सामान्य फंक्शनल इंटरफेस (java.util.function)

इंटरफेसपैरामीटर्सरिटर्नउद्देश्य
PredicateTbooleanशर्त जांच
FunctionTRपरिवर्तन
ConsumerTvoidउपभोग करना
Supplierकोई नहींTआपूर्ति करना
UnaryOperatorTTयूनरी ऑपरेशन
BinaryOperatorT, TTबाइनरी ऑपरेशन

निष्कर्ष: इंटरफेस Java में अब्स्ट्रैक्शन और पॉलीमॉर्फिज्म का मूल निर्माण खंड है। यह व्यवहार का अनुबंध परिभाषित करता है बिना कार्यान्वयन निर्दिष्ट किए (Java 7 तक)। Java 8+ में डिफ़ॉल्ट/स्टेटिक मेथड्स के साथ इंटरफेस विकसित हो सकते हैं और यूटिलिटी प्रदान कर सकते हैं।

  1. - Java में नेस्टेड इंटरफेस (Nested Interface)

    हम किसी अन्य इंटरफेस या क्लास के अंदर एक इंटरफेस घोषित कर सकते हैं। ऐसे इंटरफेस को नेस्टेड इंटरफेस (Nested Interface) कहा जाता है। नेस्टेड इंटरफेस को नियंत्रित करने वाले निम्नलिखित नियम हैं: एक इंटरफेस के भीतर घोषित नेस्टेड इंटरफेस public होना चाहिए। एक क्लास के भीतर घोषित नेस्टेड इंटरफेस का कोई

  1. - Java में Abstract Class

    अपनी घोषणा में abstract कीवर्ड वाली क्लास को abstract क्लास के रूप में जाना जाता है।Abstract क्लासेज में abstract मेथड्स हो भी सकते हैं और नहीं भी, यानी बिना बॉडी वाले मेथड्स (public void get();)लेकिन, यदि एक क्लास में कम से कम एक abstract मेथड है, तो क्लास को abstract घोषित किया जाना चाहिए।यदि एक क

  1. - Java में Final Class

    क्लास को final घोषित करने का मुख्य उद्देश्य क्लास को सबक्लास होने से रोकना है। यदि एक क्लास को final के रूप में चिह्नित किया जाता है तो कोई भी क्लास final क्लास से किसी भी सुविधा को इनहेरिट नहीं कर सकती।public final class Test { // body of class }