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

क्या हम जावा में स्टेटिक मेथड्स को ओवरलोड या ओवरराइड कर सकते हैं?

जावा में स्टेटिक मेथड्स को ओवरलोड किया जा सकता है। लेकिन एक शर्त है कि दो मेथड्स को ओवरलोड नहीं किया जा सकता अगर वे केवल '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()
  1. क्या Java में Enum किसी क्लास को एक्सटेंड कर सकता है? क्या Java में Enum किसी क्लास को एक्सटेंड कर सकता है?

    नहीं, Java में सभी एनम अंतर्निहित रूप से java.lang.Enum को एक्सटेंड करते हैं। चूंकि Java बहु-विरासत का समर्थन नहीं करता, एनम किसी अन्य क्लास को एक्सटेंड नहीं कर सकते।त्रुटि उदाहरणclass Sample { } enum Scooters extends Sample { } // संकलन त्रुटिसंकलन त्रुटिEnumExample.java:5: error: { expected enum

  1. - क्या हम Java में प्रोटेक्टेड मेथड को ओवरराइड कर सकते हैं?

    हाँ, सुपरक्लास के प्रोटेक्टेड मेथड को सबक्लास द्वारा ओवरराइड किया जा सकता है। यदि सुपरक्लास मेथड प्रोटेक्टेड है, तो सबक्लास ओवरराइड मेथड में प्रोटेक्टेड या पब्लिक (लेकिन डिफ़ॉल्ट या प्राइवेट नहीं) हो सकता है जिसका अर्थ है कि सबक्लास ओवरराइड मेथड में कमजोर एक्सेस स्पेसिफायर नहीं हो सकता।उदाहरणclass A

  1. Java में JTextField में पैडिंग कैसे जोड़ें? Java में JTextField में पैडिंग कैसे जोड़ें?

    JTextField JTextComponent क्लास का सबक्लास है और यह सबसे महत्वपूर्ण घटकों में से एक है जो उपयोगकर्ता को सिंगल-लाइन फॉर्मेट में टेक्स्ट मान इनपुट करने की अनुमति देता है। JTextField क्लास ActionListener इंटरफेस जनरेट करेगा जब हम इसके अंदर कुछ इनपुट दर्ज करने का प्रयास करते हैं। JTextField क्लास के महत