उदाहरण
interface MyInterface {
static void staticFun() {
System.out.println("नवनिर्मित स्टेटिक मेथड में");
}
void methodOverride(String str);
}
public class DemoInterface implements MyInterface {
public static void main(String[] args) {
DemoInterface demoInter = new DemoInterface();
MyInterface.staticFun();
demoInter.methodOverride("ओवरराइड मेथड में");
}
@Override
public void methodOverride(String str) {
System.out.println(str);
}
}
आउटपुट
नवनिर्मित स्टेटिक मेथड में
ओवरराइड मेथड में
व्याख्या: एक इंटरफेस परिभाषित किया जाता है, जिसके अंदर एक स्टेटिक फंक्शन परिभाषित होता है। 'methodOverride' नामक एक अन्य फंक्शन बिना बॉडी के परिभाषित होता है। इस इंटरफेस को 'DemoInterface' नामक दूसरी क्लास द्वारा कार्यान्वित किया जाता है। इस क्लास के अंदर, मुख्य फंक्शन परिभाषित होता है, और 'DemoInterface' का एक इंस्टेंस भी बनाया जाता है। इस इंस्टेंस पर स्टेटिक फंक्शन को कॉल किया जाता है, और अगला, इस इंस्टेंस पर 'methodOverride' फंक्शन को कॉल किया जाता है। एक ओवरराइड स्पेसिफिकेशन लिखा जाता है, जिसके तहत 'methodOverride' को परिभाषित किया जाता है। यह फंक्शन सिर्फ स्ट्रिंग को कंसोल पर प्रिंट करता है।
इंटरफेस में स्टेटिक मेथड्स (Java 8+):
- इंटरफेस में स्टेटिक मेथड्स का शरीर होना चाहिए
- वे इंप्लीमेंटिंग क्लासेस द्वारा विरासत में नहीं मिलते
- इंटरफेस नाम के माध्यम से एक्सेस किए जाते हैं:
MyInterface.staticFun() - उपयोगिता/हेल्पर मेथड्स के लिए उपयोगी
डिफ़ॉल्ट मेथड्स vs स्टेटिक मेथड्स:
| विशेषता | डिफ़ॉल्ट मेथड | स्टेटिक मेथड |
|---|---|---|
| विरासत | इंप्लीमेंटिंग क्लासेस को मिलता है | नहीं मिलता |
| ओवरराइड | किया जा सकता है | नहीं किया जा सकता |
| एक्सेस | इंस्टेंस के माध्यम से | इंटरफेस नाम के माध्यम से |
| उद्देश्य | API विकास | उपयोगिता मेथड्स |
उदाहरण - जावा 8 स्ट्रीम API में:
interface Stream {
static Stream of(T... values) { ... } // स्टेटिक फैक्टरी
default Stream filter(Predicate p) { ... } // डिफ़ॉल्ट मेथड
}