Java 8 इंटरफेस में डिफ़ॉल्ट मेथड कार्यान्वयन की एक नई अवधारणा पेश करता है। यह क्षमता बैकवर्ड कम्पैटिबिलिटी के लिए जोड़ी गई है ताकि पुराने इंटरफेस Java 8 की लैम्ब्डा एक्सप्रेशन क्षमता का लाभ उठा सकें।
उदाहरण के लिए, List या Collection इंटरफेस में forEach मेथड डिक्लेरेशन नहीं है। इस तरह के मेथड को जोड़ने से केवल कलेक्शन फ्रेमवर्क इम्प्लीमेंटेशन्स टूट जाएंगे। Java 8 डिफ़ॉल्ट मेथड पेश करता है ताकि List/Collection इंटरफेस में forEach मेथड का डिफ़ॉल्ट कार्यान्वयन हो सके, और इन इंटरफेसेस को इम्प्लीमेंट करने वाली क्लास को इसे इम्प्लीमेंट करने की आवश्यकता नहीं है।
Java 8 से एक इंटरफेस में स्टेटिक हेल्पर मेथड्स भी हो सकते हैं।
डिफ़ॉल्ट मेथड्स (Default Methods)
defaultकीवर्ड के साथ घोषित- मेथड बॉडी होती है (कार्यान्वयन)
- इम्प्लीमेंटिंग क्लासेस को विरासत में मिलते हैं
- ओवरराइड किए जा सकते हैं (वैकल्पिक)
- मल्टीपल इंटरफेस में समान डिफ़ॉल्ट मेथड होने पर अनिवार्य ओवरराइड आवश्यक
स्टेटिक मेथड्स (Static Methods)
staticकीवर्ड के साथ घोषित- इंटरफेस नाम से कॉल:
InterfaceName.method() - विरासत में नहीं मिलते
- ओवरराइड नहीं किए जा सकते (केवल हाइडिंग)
- यूटिलिटी/फैक्टरी मेथड्स के लिए आदर्श
संयुक्त उदाहरण
interface Vehicle {
// एब्स्ट्रैक्ट मेथड
void start();
// डिफ़ॉल्ट मेथड
default void stop() {
System.out.println("Vehicle stopping...");
}
// स्टेटिक मेथड
static Vehicle createDefault() {
return new Car();
}
}
interface Electric {
void charge();
// डिफ़ॉल्ट मेथड - संघर्ष की संभावना
default void ecoMode() {
System.out.println("Eco mode on");
}
}
class Car implements Vehicle, Electric {
@Override
public void start() {
System.out.println("Car starting...");
}
@Override
public void charge() {
System.out.println("Charging battery...");
}
// दोनों इंटरफेस में ecoMode है - ओवरराइड अनिवार्य
@Override
public void ecoMode() {
Vehicle.super.ecoMode(); // या Electric.super.ecoMode()
System.out.println("Car specific eco mode");
}
}
public class Test {
public static void main(String[] args) {
Vehicle v = Vehicle.createDefault(); // स्टेटिक मेथड
v.start();
v.stop(); // डिफ़ॉल्ट
v.ecoMode(); // ओवरराइड किया गया
if (v instanceof Electric) {
((Electric) v).charge();
}
}
}
आउटपुट
Car starting... Vehicle stopping... Eco mode on Car specific eco mode Charging battery...
Java 9+ अतिरिक्त संवर्द्धन
- प्राइवेट मेथड्स: डिफ़ॉल्ट/स्टेटिक मेथड्स के लिए हेल्पर मेथड्स (कोड डुप्लीकेशन रोकने के लिए)
- प्राइवेट स्टेटिक मेथड्स: स्टेटिक हेल्पर्स
interface AdvancedInterface {
default void publicMethod() {
helper(); // प्राइवेट मेथड कॉल
}
static void staticPublic() {
staticHelper();
}
// Java 9+ प्राइवेट मेथड्स
private void helper() {
System.out.println("Private helper");
}
private static void staticHelper() {
System.out.println("Private static helper");
}
}
लाभ
| संवर्द्धन | लाभ |
|---|---|
| डिफ़ॉल्ट मेथड्स | API विकास बिना ब्रेकिंग चेंज के, लैम्ब्डा सक्षम करना |
| स्टेटिक मेथड्स | यूटिलिटी कोड इंटरफेस में, फैक्टरी मेथड्स |
| प्राइवेट मेथड्स (9+) | कोड पुन: उपयोग, एनकैप्सुलेशन |
सावधानियां
- डिफ़ॉल्ट मेथड्स
Objectमेथड्स (equals,hashCode,toString) के लिए नहीं हो सकते - डिफ़ॉल्ट मेथड्स
finalयाsynchronizedनहीं हो सकते - स्टेटिक मेथड्स इंटरफेस रेफरेंस से कॉल नहीं किए जा सकते
- अत्यधिक डिफ़ॉल्ट मेथड्स इंटरफेस को "ब्लोट" कर सकते हैं
निष्कर्ष: Java 8 इंटरफेस संवर्द्धन (डिफ़ॉल्ट/स्टेटिक मेथड्स) और Java 9 प्राइवेट मेथड्स ने इंटरफेस को शक्तिशाली बना दिया है - वे अब केवल अनुबंध नहीं, बल्कि कार्यान्वयन साझाकरण और यूटिलिटी प्रदान कर सकते हैं, जबकि बैकवर्ड कम्पैटिबिलिटी बनाए रखते हैं।