एक इंटरफेस 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)
| इंटरफेस | पैरामीटर्स | रिटर्न | उद्देश्य |
|---|---|---|---|
| Predicate | T | boolean | शर्त जांच |
| Function | T | R | परिवर्तन |
| Consumer | T | void | उपभोग करना |
| Supplier | कोई नहीं | T | आपूर्ति करना |
| UnaryOperator | T | T | यूनरी ऑपरेशन |
| BinaryOperator | T, T | T | बाइनरी ऑपरेशन |
निष्कर्ष: इंटरफेस Java में अब्स्ट्रैक्शन और पॉलीमॉर्फिज्म का मूल निर्माण खंड है। यह व्यवहार का अनुबंध परिभाषित करता है बिना कार्यान्वयन निर्दिष्ट किए (Java 7 तक)। Java 8+ में डिफ़ॉल्ट/स्टेटिक मेथड्स के साथ इंटरफेस विकसित हो सकते हैं और यूटिलिटी प्रदान कर सकते हैं।