2009-05-05 7 views
18

क्या पॉलिमॉर्फिज्म ओवरलोडिंग के लिए एक और शब्द है?क्या पॉलिमॉर्फिज्म ओवरलोडिंग के लिए एक और शब्द है?

+1

यहाँ एक निकट से संबंधित सवाल है http://stackoverflow.com/questions/673721/overloading-and-overriding – sharptooth

+2

या यह एक http://stackoverflow.com/questions/154577/polymorphism-vs-overriding-vs-overloading – ktulur

+1

मुझे लगता है कि इसका एक बेहतर जवाब है :) – thomasrutter

उत्तर

41

नहीं; ओवरलोडिंग एक ही नाम के साथ एक ही पैरामीटर के साथ एक विधि बना रही है, या पैरामीटर जो किसी अन्य प्रकार के हैं।

पॉलिमॉर्फिज्म विभिन्न प्रकारों में एक विशिष्ट विधि के कार्यान्वयन/कार्यक्षमता को बदलने के बारे में है (जिसमें सभी के पास 'बेस-टाइप' है)।

ओवरलोडिंग:

public class TestClass 
{ 
    public void DoSomething(int a, int b) {} 

    public void DoSomething(int a, int b, string x) {} 
} 

बहुरूपता:

public abstract class Base 
{ 
    public abstract DoSomething(); 
} 

public class A : Base 
{ 
    public override DoSomething() 
    { 
     Console.WriteLine("I am A"); 
    } 
} 

public class B : Base 
{ 
    public override DoSomething() 
    { 
     Console.WriteLine("I am B"); 
    } 
} 
+0

होना चाहिए एक इंटरफेस के माध्यम से किया सही? –

+2

आवश्यक रूप से एक इंटरफ़ेस नहीं है। एक सामान्य आधार वर्ग पर्याप्त होगा। – sharptooth

+2

यह एक इंटरफ़ेस के साथ-साथ आधार या अमूर्त वर्ग के साथ भी किया जा सकता है। बिंदु यह है कि इससे कोई फर्क नहीं पड़ता कि वस्तु का विशिष्ट प्रकार क्या है। आधार का उपयोग करने के प्रयोजनों के लिए इसे आधार से अलग करने की आवश्यकता है; जो भी आधार हो सकता है। –

9

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

account = new BankAccount(); 
account = new BankAccount(1000); 

संकलक जो निर्माता, विधि हस्ताक्षर द्वारा उपयोग करने के लिए संख्या और प्रदान की मानकों के प्रकार सहित बता सकते हैं। प्रोग्राम चलाने से पहले संकलन समय पर उपयोग करने के लिए एक विधि का यह चयन प्रारंभिक बाध्यकारी कहा जाता है। दूसरी तरफ, जब हम x.getMeasure() जैसे पॉलीमोर्फिक विधि कॉल का उपयोग करते हैं तो वास्तविक getMeasure() विधि कहा जाता है कि किस प्रकार का ऑब्जेक्ट x संदर्भित करता है। चूंकि ऑब्जेक्ट्स का निर्माण नहीं होता है जब तक प्रोग्राम चलाता नहीं है, इसलिए विधि को रन-टाइम पर निर्धारित किया जाता है। इसलिए, आभासी मशीन, संकलक उचित विधि का चयन नहीं करता है। इस विधि चयन को देर से बाध्यकारी कहा जाता है।

1

नहीं, ऐसा नहीं है।

ओवरलोडिंग एक ही नाम के साथ एक विधि या ऑपरेटर बनाने का संदर्भ देता है, लेकिन अलग-अलग पैरामीटर और - भाषा के आधार पर - अलग-अलग रिटर्न प्रकार।

ओवरराइड करना एक व्युत्पन्न वर्ग में समान हस्ताक्षर से एक विधि reimplementing को संदर्भित करता है और बहुरूपता सक्षम बनाता है - निर्णय क्या एक ओवरराइट विधि कॉल करने के कार्यान्वयन वस्तु के वास्तविक प्रकार के आधार पर क्रम में किया जाता है।

class BaseClass 
{ 
    public void DoStuff(Int32 value) { } // Overloading 

    public void DoStuff(String value) { } // Overloading 

    public virtual void DoOtherStuff(String value) { } 
} 

class DerivedClass : BaseClass 
{ 
    public override void DoOtherStuff(String value) { } // Overriding 
} 

प्रयोग उदाहरण

BaseClass instance = null; 

if (condition) 
{ 
    instance = new BaseClass(); 
} 
else 
{ 
    instance = new DerivedClass(); 
} 

// Using overloads 
instance.DoStuff(4); 
instance.DoStuff("four"); 

// Polymorphism - it depends on the actual type of the object 
// referenced by the variable 'instance' if BaseClass.DoOtherStuff() 
// or DerivedClass.DoOtherStuff() will be called at runtime. 
instance.DoOtherStuff("other stuff"); 
5

सं

Polymorphism विभिन्न डेटा प्रकार के मूल्यों को एक समान अंतरफलक का उपयोग कर नियंत्रित किया जा करने की अनुमति देता है कि एक प्रोग्रामिंग भाषा की सुविधा है। पैरामीट्रिक बहुरूपता की अवधारणा डेटा प्रकारों और कार्यों दोनों पर लागू होती है। एक ऐसा फ़ंक्शन जो विभिन्न प्रकार के मानों पर मूल्यांकन या लागू किया जा सकता है उसे पॉलिमॉर्फिक फ़ंक्शन के रूप में जाना जाता है। एक डेटा प्रकार जो सामान्यीकृत प्रकार (उदाहरण के लिए, मनमानी प्रकार के तत्वों के साथ एक सूची) के रूप में प्रकट हो सकता है, नामित पॉलीमोर्फिक डेटा प्रकार को सामान्यीकृत प्रकार की तरह निर्दिष्ट किया जाता है, जिससे ऐसी विशेषज्ञताएं बनाई जाती हैं।

Method overloading एक फीचर ऐसे एडीए, सी #, सी ++, डी और जावा के रूप में विभिन्न प्रोग्रामिंग भाषाओं में पाया गया कि एक ही नाम के साथ कई तरीके है जिसके निवेश के प्रकार के मामले में एक दूसरे से अलग के निर्माण की अनुमति देता है और समारोह के आउटपुट का प्रकार।

विधि अधिभार को टाइप पॉलिमॉर्फिज्म या आभासी कार्यों के साथ भ्रमित नहीं किया जाना चाहिए। उन में, रनटाइम पर सही विधि चुना जाता है।

स्रोत: विकिपीडिया।

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