2009-11-26 16 views
32

स्कैला जैसी भाषाओं में, पैरामीटर की संख्या और/या विधि के पैरामीटर के प्रकार को बदलकर एक विधि नाम के लिए कई परिभाषाएं हो सकती हैं। इसे विधि अधिभार कहा जाता है।एकाधिक प्रेषण और विधि अधिभार के बीच क्या अंतर है?

यह एकाधिक प्रेषण से अलग कैसे है?

धन्यवाद

उत्तर

49

विधि ओवरलोडिंग संकलन समय पर हल हो जाती है।

एकाधिक प्रेषण रनटाइम पर हल किया गया है।

डबल प्रेषण का उपयोग करते समय बुलाया गया विधि वास्तविक प्रकार के रिसीवर और तर्कों पर निर्भर करता है। विधि अधिभार हालांकि, केवल कॉल किए गए विधि को पैरामीटर के घोषित प्रकार पर निर्भर करता है। क्यूं कर? जावा अपने पूर्ण हस्ताक्षर (प्रारंभिक बाध्यकारी) के साथ संकलन समय पर विधि कॉल करता है। पूर्ण हस्ताक्षर में सभी पैरामीटर प्रकार शामिल होते हैं, इसलिए जब तर्क का वास्तविक प्रकार रनटाइम (पॉलीमोप्रिज्म) पर भिन्न होता है, तो ओवरलोडिंग काम नहीं कर सकती है जैसा आप उम्मीद कर सकते हैं!

void add(Foo o) { ... } 
void add(Bar o) { ... } 
void client() { 
    Foo o = new Bar(); 
    add(o); // calls add(Foo) not add(Bar)! 
} 

कई प्रेषण का उपयोग कर तथापि

void add(Foo o) { o.dispatch(this); } 
void add(Bar o) { o.dispatch(this); } 
void client() { 
    Foo o = new Bar(); 
    add(o); // calls #dispatch as defined in Bar! 
} 

हालात थोड़ा स्काला में अंतर हो सकता है, हालांकि सामान्य भेद ही के रूप में सभी प्रोग्रामिंग भाषाओं में यहां प्रस्तुत किया जाना चाहिए।

+0

महान उदाहरण के लिए धन्यवाद। – shj

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