2013-03-08 4 views
8

अगर मैं जावा में निम्नलिखित कोड है:क्या यह अधिभार, अलग-अलग वर्गों और अलग-अलग हस्ताक्षरों में समान नाम वाले विधियां हैं?

class A { 

    public int add(int a , int b) { 
     return (a+b); 
    } 
} 

class B extends A { 
    public float add(float a , float b) { 
     return (a+b); 
} 

इस विशेष मामले उप-वर्ग वास्तव में आधार वर्ग के add समारोह अधिभावी नहीं है के रूप में वे अलग हस्ताक्षर किया है और अधिक भार की अवधारणा केवल तभी होता है में वे एक ही दायरे में हैं। तो, उप-वर्ग B में फ़ंक्शन add(float , float) फ़ंक्शन एक पूरी तरह से नया फ़ंक्शन के रूप में माना जाता है और ओवरलोडिंग और ओवरराइडिंग की अवधारणा इसके लिए लागू नहीं है? और क्या यह 'स्टेटिक बाध्यकारी' या 'गतिशील बाध्यकारी' का उपयोग करता है?

+2

बस एक संकेत: जावा में कक्षा नाम पूंजी पत्र से शुरू होना चाहिए। –

+0

मुझे नहीं लगता कि यह अनिवार्य है .. –

+0

यह अनिवार्य नहीं है, लेकिन यह पठनीयता आदि में सहायता करता है –

उत्तर

2

संक्षेप में, हाँ। ओवरराइड करने के लिए, आपको पूर्ण विधि हस्ताक्षर को दोहराने की आवश्यकता है, जिसमें विधि का नाम, पैरामीटर और रिटर्न प्रकार शामिल हैं। the tutorial

एक ही हस्ताक्षर (नाम, प्लस संख्या और उसके मानदंड के प्रकार) के साथ एक उपवर्ग में एक उदाहरण विधि और वापसी प्रकार के रूप में सुपर क्लास में एक उदाहरण विधि सुपर क्लास की विधि को ओवरराइड करता है से।

आप @Override annotation, यदि आप सफलतापूर्वक एक विधि ओवरराइड नहीं है जो एक संकलक त्रुटि ट्रिगर करेंगे विचार करना चाह सकते।

इस विशेष उदाहरण में, ऐसा लगता है कि आपको जेनेरिक सहित कुछ समाधान के रूप में ओवरराइड करने की आवश्यकता नहीं है। तो तुम एक वर्ग a<Integer> और एक समान वर्ग a<Float>

+0

तो आप कह रहे हैं कि कक्षा बी में जोड़ें (फ्लोट, फ्लोट) एक पूरी तरह से अलग कार्य है और कक्षा ए में ऐड फ़ंक्शन के साथ कुछ भी नहीं है। इस मामले में, ओवरलोडिंग और न ही ओवरराइडिंग यहां खेलना है। –

+0

शायद। आप ओवरराइड नहीं कर रहे हैं, और आप मूल के साथ ओवरलोडेड विधि के साथ एक अलग श्रेणी प्रदान कर रहे हैं, इसलिए शायद एक जेनिक्स समाधान –

4

विधि वर्ग ख में जोड़ने का दृष्टांत सकता वर्ग एक में जोड़ने के अधिभार है। ओवरराइड नहीं है। एक ओवरराइड मूल ऐड विधि का एक अलग कार्यान्वयन होगा।

+0

पर अधिक उपयुक्त है लेकिन मुझे पता था कि अधिभार की अवधारणा खेल में आती है अगर केवल तभी कार्य हो एक ही दायरे या कक्षा में। इसने भ्रम पैदा किया है –

2

उस स्थिति में आप ओवरराइडिंग नहीं कर रहे हैं, क्योंकि हस्ताक्षर अलग हैं।

लेकिन वहाँ वर्ग ख में अधिक भार है, जब से तुम एक ही नाम है, लेकिन विभिन्न मापदंडों (एक अगर वर्ग एक, और वर्ग बी में दूसरे एक)

आशा है कि यह मदद करता है के साथ दो विधियों की है।

+0

लेकिन मुझे पता था कि ओवरलोडिंग की अवधारणा खेल में आती है अगर केवल तभी कार्य समान स्कोप या कक्षा में हों। यह भ्रम पैदा किया है। –

1

ऐसी विधि हो सकती है जो ओवरराइड नहीं है लेकिन उपclass में अधिभारित है। यहां उप-वर्ग में दो ऐड() विधियां हैं। वह संस्करण जो int तर्क (ओवरराइड नहीं) स्वीकार करता है, और अधिभारित विधि जोड़ता है() जो फ़्लोट तर्क स्वीकार करता है।

-1

वर्ग ए में विधि add() भी विरासत से वर्ग बी के लिए उपलब्ध है, इसलिए विधि overloaded कक्षा में int, int से float, float लिए डेटा प्रकार बदलकर है।

+0

यह वास्तव में सवाल का जवाब नहीं देता है, मुझे लगता है। पूछताछ अधिभार और ओवरराइडिंग के बारे में जानता है। –

0

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

-1

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

+0

कृपया पूंजीकरण और विराम चिह्न पर काम करें। यह जवाब समझना काफी मुश्किल है – lwassink

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

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