2012-05-13 21 views
6

मुझे पता है कि विधि को ओवरलोड कैसे करें, और विधि को ओवरराइड कैसे करें। लेकिन क्या एक ही समय में एक विधि को ओवरलोड और ओवरराइड करना संभव है? यदि हां, तो कृपया एक उदाहरण दें।जावा में अधिभारित और ओवरराइड

उत्तर

13

ओवरलोडिंग और ओवरराइडिंग पूरक चीजें हैं, ओवरलोडिंग का मतलब एक ही विधि का नाम है, लेकिन विभिन्न पैरामीटर, और ओवरराइडिंग का मतलब समान पैरामीटर के साथ उप-वर्ग में एक ही विधि का नाम है। इसलिए ओवरलोडिंग और ओवरराइडिंग के लिए एक ही समय में ऐसा संभव नहीं है क्योंकि ओवरलोडिंग विभिन्न मानकों का तात्पर्य है।

उदाहरण:

class A { 
    public void doSth() { /// } 
} 

class B extends A { 
    public void doSth() { /* method overriden */ } 

    public void doSth(String b) { /* method overloaded */ } 

} 

चीयर्स!

+5

यदि आप चाहते हैं, तो आप एक ओवरलोडेड विधि को ओवरराइड कर सकते हैं। यह जितना करीब हो सकता है उतना करीब है। – user845279

+0

जब ऐसा होता है, तो विधि के बाध्यकारी (स्थैतिक या गतिशील के मामले में) के लिए ज़िम्मेदार कौन सा है? ओवरराइडिंग या ओवरलोडिंग? – zgulser

5

ओवरलोडिंग और ओवरलोडिंग केवल अवशोषण हैं। ओवरलोडिंग का मतलब है कि संकलक कॉल करने के लिए कौन से फ़ंक्शन को संबोधित करने के लिए पैरामीटर के प्रकार और संख्या के संयोजन के साथ नाम का उपयोग करता है। हकीकत में एक विधि अधिभारित करने से यह कुछ अलग नामकरण से अलग नहीं है क्योंकि संकलक को देखने के लिए संकलक का उपयोग कुंजी और पैरामीटर सूची का संयोजन है।

ओवरराइडिंग एक ही सिद्धांत है, सिवाय इसके कि कंपाइलर super कीवर्ड के साथ अतिव्यापी फ़ंक्शन को संबोधित कर सकता है।

तो क्या आप ओवरलोडेड फ़ंक्शन को ओवरराइड कर सकते हैं? हां, चूंकि ओवरलोडेड विधि कंपाइलर की आंखों में एक पूरी तरह से अलग विधि है।

+0

ओवरराइडिंग बिल्कुल वही बात नहीं है। कॉल करने के तरीके के बारे में निर्णय रनटाइम को स्थगित कर दिया गया है। संकलक इसे तय नहीं करता है। – EJP

+0

धन्यवाद, यह सहायक है! –

+0

@EJP - आखिरकार संकलक निर्णय लेता है भले ही यह एक vtables के निर्माण और गतिशील प्रेषण की सुविधा के लिए vpointers के असाइनमेंट के माध्यम से सारणित है। बंधे संबंधों को कहीं भी शुरू किया जाना है। – nsfyn55

1

यह आपके लिए क्या मतलब है निर्भर करता है। सुपरक्लास में ओवरलोडेड विधि के लिए एक विधि ओवरराइड हो सकती है। और आप एक विधि को अधिभारित कर सकते हैं जिसे आप एक साथ विधि का उपयोग करके ओवरराइड कर रहे हैं।

हालांकि, आपके पास एक विधि नहीं हो सकती है जो नया ओवरलोड और ओवरराइड दोनों है। एक ओवरराइड होने की विधि के लिए, सुपरक्लास में एक ही हस्ताक्षर वाला एक और तरीका पहले से मौजूद होना चाहिए ... और इसका मतलब है कि यह विधि नया ओवरराइड नहीं हो सकती है।

संबंधित मुद्दे