जावा में स्टेटिक मेथड्स को ओवरलोड किया जा सकता है। लेकिन एक शर्त है कि दो मेथड्स को ओवरलोड नहीं किया जा सकता अगर वे केवल 'static' कीवर्ड के कारण अलग हैं।
उदाहरण - स्टेटिक मेथड ओवरलोडिंग
public class Demo {
public static void test() {
System.out.println("Demo क्लास test फंक्शन कॉल किया गया");
}
public static void test(int val) {
System.out.println("पैरामीटर के साथ Demo क्लास test फंक्शन कॉल किया गया");
}
public static void main(String args[]) {
System.out.println("मुख्य क्लास में, Demo फंक्शन्स कॉल किए जा रहे हैं");
Demo.test();
Demo.test(57);
}
}
आउटपुट
मुख्य क्लास में, Demo फंक्शन्स कॉल किए जा रहे हैं
Demo क्लास test फंक्शन कॉल किया गया
Demo क्लास test फंक्शन पैरामीटर के साथ कॉल किया गया
व्याख्या: Demo क्लास में 'test' नामक एक फंक्शन होता है जो एक विशिष्ट संदेश प्रिंट करता है। यह एक इंटीजर मान को पैरामीटर के रूप में लेने वाला एक और 'test' फंक्शन भी परिभाषित करता है। फंक्शन बॉडी के अंदर प्रासंगिक संदेश दिखाया जाता है। मुख्य फंक्शन में, test फंक्शन को बिना पैरामीटर के और एक इंटीजर पैरामीटर के साथ कॉल किया जाता है। प्रासंगिक संदेश कंसोल पर प्रदर्शित होता है।
जावा में स्टेटिक मेथड्स को ओवरराइड नहीं किया जा सकता। सेम सिग्नेचर वाले स्टेटिक मेथड्स को सब-क्लास में परिभाषित किया जा सकता है, लेकिन यह रनटाइम पॉलीमॉर्फिज्म नहीं होगा। इसलिए, ओवरराइडिंग संभव नहीं है।
उदाहरण - स्टेटिक मेथड "ओवरराइडिंग" (हाइडिंग)
class BaseClass {
public static void show() {
System.out.println("बेस क्लास से स्टेटिक या क्लास मेथड");
}
public void printIt() {
System.out.println("बेस क्लास से नॉन-स्टेटिक या इंस्टेंस मेथड");
}
}
class DerivedClass extends BaseClass {
public static void show() {
System.out.println("डेराइव्ड क्लास से स्टेटिक या क्लास मेथड");
}
public void printIt() {
System.out.println("डेराइव्ड क्लास से नॉन-स्टेटिक या इंस्टेंस मेथड");
}
}
public class Demo {
public static void main(String args[]) {
BaseClass myInstance = new DerivedClass();
System.out.println("बेस क्लास इंस्टेंस बनाया गया।");
myInstance.show();
System.out.println("show फंक्शन कॉल किया गया");
myInstance.printIt();
System.out.println("printIt फंक्शन कॉल किया गया");
}
}
आउटपुट
बेस क्लास इंस्टेंस बनाया गया।
बेस क्लास से स्टेटिक या क्लास मेथड
show फंक्शन कॉल किया गया
डेराइव्ड क्लास से नॉन-स्टेटिक या इंस्टेंस मेथड
printIt फंक्शन कॉल किया गया
व्याख्या: बेस क्लास में 'show' नामक एक स्टेटिक फंक्शन होता है जो एक संदेश प्रिंट करता है। इसी तरह, 'printIt' नामक एक अन्य फंक्शन एक संदेश प्रदर्शित करता है। एक क्लास बेस क्लास से प्राप्त होती है जो दोनों फंक्शन्स को विरासत में लेती है। Demo नामक एक क्लास मुख्य फंक्शन रखती है जो बेस क्लास का एक इंस्टेंस बनाता है जो डेराइव्ड टाइप क्लास का होता है। प्रासंगिक संदेश कंसोल पर प्रदर्शित होते हैं।
मुख्य अंतर:
| पहलू | स्टेटिक मेथड (हाइडिंग) | इंस्टेंस मेथड (ओवरराइडिंग) |
|---|---|---|
| रनटाइम बाइंडिंग | नहीं (कंपाइल-टाइम) | हां (डायनामिक डिस्पैच) |
| रेफरेंस टाइप मायने रखता है | हां | नहीं (ऑब्जेक्ट टाइप मायने रखता है) |
| @Override एनोटेशन | अनुमत नहीं | आवश्यक/अनुशंसित |
| super कॉल | super.staticMethod() | super.instanceMethod() |
नियम:
- स्टेटिक मेथड्स क्लास से संबंधित होते हैं, इंस्टेंस से नहीं
- सबक्लास में समान सिग्नेचर = मेथड हाइडिंग, ओवरराइडिंग नहीं
- हमेशा स्टेटिक मेथड्स को क्लास नाम से कॉल करें:
ClassName.staticMethod()