विधि ओवरलोडिंग और ओवरराइडिंग दो तरीके हैं जिनसे जावा बहुरूपता प्रदर्शित करता है। बहुरूपता दो ग्रीक शब्दों के संयोजन से आता है: "पॉली" का अर्थ है कई और "मॉर्फ" का अर्थ है रूप। इसलिए, बहुरूपता कई रूपों को लेने के तरीकों को सक्षम बनाता है।
जावा में विधियों को अधिभार या ओवरराइड करने का तरीका जानने के लिए इस गाइड का पालन करें।
मेथड ओवरलोडिंग क्या है?
"विधि ओवरलोडिंग" एक ही नाम वाले वर्ग में विभिन्न विधियों को परिभाषित करने के लिए संदर्भित करता है। विधियों में अलग-अलग हस्ताक्षर होने चाहिए। एक विधि हस्ताक्षर एक विधि के नाम और पैरामीटर सूची का संयोजन है। इसमें रिटर्न प्रकार शामिल नहीं है।
कंपाइलर जानता है कि किस विधि का उपयोग करना है, प्रकार, मापदंडों की संख्या और क्रम जिसमें उन्हें रखा गया है।
सम्बंधित: जावा प्रोग्रामिंग भाषा में वंशानुक्रम की खोज
विधि ओवरलोडिंग संकलन-समय बहुरूपता प्रदर्शित करता है। कंपाइल-टाइम पॉलीमॉर्फिज्म का मतलब है कि जावा कंपाइलर किसी ऑब्जेक्ट को रनटाइम पर उसकी कार्यक्षमता से बांधता है। संकलक इसे प्राप्त करने के लिए विधि हस्ताक्षर की जाँच करता है।
इस प्रकार के बहुरूपता को स्थैतिक या प्रारंभिक बंधन के रूप में भी जाना जाता है।
नीचे दी गई विधि ओवरलोडिंग उदाहरण देखें:
कक्षा अंकगणित{
इंट क्यूब (इंट एक्स){
वापसी x*x*x;
}
डबल क्यूब (डबल x){
वापसी x*x*x;
}
फ्लोट क्यूब (फ्लोट x){
वापसी x*x*x;
}
सार्वजनिक स्थैतिक शून्य main (String [] args){
अंकगणित myMultiplication = नया अंकगणित ();
System.out.println ("5 का घन है" + myMultiplication.cube (5));
System.out.println ("5.0 का घन है" + myMultiplication.cube (5.0));
System.out.println ("0.5 का घन है" + myMultiplication.cube (0.5));
}
}
आउटपुट:
5 का घन 125. है
5.0 का घन 125.0. है
0.5 का घन 0.125. है
ऊपर दिया गया कोड दिखाता है कि आप विभिन्न प्रकार के घन कैसे प्राप्त कर सकते हैं (पूर्णांक, दोहरा, नाव) उसी विधि का उपयोग करना।
आम तौर पर, विभिन्न पैरामीटर प्रकारों के साथ समान विधियों को परिभाषित करने के लिए विधि ओवरलोडिंग का उपयोग किया जाता है।
मेथड ओवरराइडिंग क्या है?
यह एक उपवर्ग में एक विधि के एक अलग कार्यान्वयन को संदर्भित करता है। विधि को पहले ही मूल वर्ग में परिभाषित किया जाना चाहिए।
ओवरराइडिंग विधि (अर्थात उपवर्ग में से एक) में सुपरक्लास के समान विधि हस्ताक्षर होना चाहिए। ओवरराइडिंग विधि का रिटर्न प्रकार सुपरक्लास में समान या उपप्रकार हो सकता है।
ओवरराइडिंग का उपयोग आमतौर पर उपवर्ग में किसी वस्तु के व्यवहार के विशिष्ट कार्यान्वयन को शामिल करने के लिए किया जाता है।
वर्ग खाता{
सार्वजनिक शून्य संदेश () {
System.out.println ("
हमारे साथ खाता खोलने के लिए धन्यवाद!");
}
सार्वजनिक स्थैतिक शून्य main (String [] args[]) {
खाता myAccount = नया खाता ();
बचत मेरी बचत = नई बचत ();
फिक्स्डडिपॉजिट myFixedDepo = नया फिक्स्डडिपोजिट ();
myAccount.message ();
mySavings.message ();
myFixedDepo.message ();
}
}
वर्ग बचत खाता बढ़ाता है {
सार्वजनिक शून्य संदेश () {
System.out.println ("
हमारे साथ बचत खाता खोलने के लिए धन्यवाद!");
}
}
क्लास फिक्स्डडिपॉजिट खाता बढ़ाता है {
सार्वजनिक शून्य संदेश () {
System.out.println ("
हमारे साथ एक सावधि जमा खाता खोलने के लिए धन्यवाद!");
}
}
आउटपुट:
हमारे साथ खाता खोलने के लिए धन्यवाद!
हमारे साथ बचत खाता खोलने के लिए धन्यवाद!
हमारे साथ सावधि जमा खाता खोलने के लिए धन्यवाद!
उपरोक्त उदाहरण दिखाता है कि कैसे विधि संदेश() उपवर्गों में ओवरराइड किया गया है जमा पूंजी तथा सावधि जमा. बचत खाते वाले और सावधि जमा खाते वाले बैंक खाताधारकों के लिए अलग-अलग संदेश प्रदर्शित किए जाएंगे।
सम्बंधित: जावा में स्ट्रिंग्स का उपयोग करने के बारे में आपको क्या जानना चाहिए
यह भी ध्यान देने योग्य है कि विधि ओवरराइडिंग रनटाइम बहुरूपता या गतिशील विधि प्रेषण को प्रदर्शित करता है। इसका मतलब यह है कि कॉल की जाने वाली विधि को संकलन के बजाय रनटाइम पर हल किया जाता है।
किसी विधि को ओवरराइड होने से बचाने के लिए, कीवर्ड का उपयोग करें अंतिम.
अंतिम शून्य संदेश () {
System.out.println ("
हमारे साथ खाता खोलने के लिए धन्यवाद!");
}
जब कोई उपवर्ग इसे ओवरराइड करने का प्रयास करता है, तो एक संकलन त्रुटि उत्पन्न होगी।
आदर्श रूप से, एक कंस्ट्रक्टर के भीतर बुलाए गए सभी तरीके होने चाहिए अंतिम. यह उपवर्गों के कारण होने वाले किसी भी अनपेक्षित परिवर्तन से बचने के लिए है।
कभी-कभी, आपको ओवरराइडिंग विधि के भीतर एक ओवरराइड विधि तक पहुंचने की आवश्यकता हो सकती है। आप कीवर्ड का उपयोग कर सकते हैं सुपर इसके बाद डॉट ऑपरेटर (.) और ऐसे मामले में विधि का नाम।
सुपरक्लास पर विचार करें जानवर.
क्लास एनिमल{
सार्वजनिक शून्य चाल () {
System.out.println ("
मैं हिल सकता हूँ।");
}
}
नीचे एक उपवर्ग है, जिसे कहा जाता है मछली, जो ओवरराइड करता है चाल ():
कक्षा मछली पशु को बढ़ाती है {
सार्वजनिक शून्य चाल () {
System.out.println ("
मैं तैर सकता हूँ।");
सुपर.मूव ();
}
सार्वजनिक स्थैतिक शून्य main (String [] args[]){
मछली तिलापिया = नई मछली ();
तिलापिया.मूव ();
}
}
आउटपुट:
मैं तैर सकता हूँ।
मैं हिल सकता हूँ।
किसी विधि को ओवरराइड करते समय, आपको उपयोग किए गए एक्सेस संशोधक से भी सावधान रहने की आवश्यकता है। उपवर्ग में संशोधक की दृश्यता का स्तर समान होना चाहिए या आधार वर्ग की तुलना में अधिक होना चाहिए। उदाहरण के लिए, यदि बेस क्लास में विधि को परिभाषित किया गया है संरक्षित, तो ओवरराइडिंग विधि या तो हो सकती है संरक्षित या सह लोक.
बहुरूपता के साथ सरल कोड
कोड सरलीकरण के लिए विधि ओवरराइडिंग और ओवरलोडिंग महत्वपूर्ण हैं, और सरल कोड अच्छा अभ्यास है।
क्यों? ग्रैंड सेंट्रल स्टेशन की तुलना में अधिक ins और outs के साथ एक जटिल कोडबेस की कल्पना करें। अब कल्पना कीजिए कि एक विनाशकारी बग आपकी आंखों के सामने आपकी मेहनत को नष्ट करना शुरू कर देता है। आपको संक्रमण के स्रोत को अलग करने की आवश्यकता है, और आपको इसे जल्दी से करने की आवश्यकता है।
सौभाग्य, आपने अपना कोड सरल नहीं किया... अब आप क्रिप्टोग्राफ़ी में एक सच्चा पाठ प्राप्त करने वाले हैं। प्रभावी डेटा संरचनाओं को नियोजित करना और कोड को छोटा करने के लिए आप जो कर सकते हैं वह करना (जैसे DRY को ध्यान में रखना) इस तरह की स्थिति के खिलाफ आपका सबसे अच्छा बचाव है।
आपकी जावा सीखने की सूची में अगला सरणियों के साथ काम करना चाहिए। वे महत्वपूर्ण डेटा संरचनाएं हैं जिनका उपयोग डेटा बिंदुओं के बैचों को संग्रहीत करने के लिए किया जाता है।
जावा सीखना? सरणियों को आपके डेटा को आसानी से संभालने दें।
आगे पढ़िए
- प्रोग्रामिंग
- जावा
- कोडिंग ट्यूटोरियल

जेरोम MakeUseOf में स्टाफ राइटर हैं। वह प्रोग्रामिंग और लिनक्स पर लेख शामिल करता है। वह एक क्रिप्टो उत्साही भी है और हमेशा क्रिप्टो उद्योग पर नजर रखता है।
हमारे न्यूज़लेटर की सदस्यता
तकनीकी युक्तियों, समीक्षाओं, निःशुल्क ई-पुस्तकों और अनन्य सौदों के लिए हमारे न्यूज़लेटर से जुड़ें!
एक और क़दम…!
कृपया अपने ईमेल पते की पुष्टि उस ईमेल में करें जो हमने अभी आपको भेजी है।