जावा हमेशा उपलब्ध विधि के सबसे विशिष्ट लागू संस्करण का उपयोग करने की कोशिश करेगा (देखें JLS .1215.12.2 )।
Object
, char[]
और Integer
सभी null
एक वैध मूल्य के रूप में ले सकते हैं । इसलिए सभी 3 संस्करण लागू हैं, इसलिए जावा को सबसे विशिष्ट एक खोजना होगा।
चूंकि Object
, सुपर-प्रकार है char[]
, सरणी संस्करण Object
-version की तुलना में अधिक विशिष्ट है । इसलिए यदि केवल वे दो विधियाँ मौजूद हैं, तो char[]
संस्करण चुना जाएगा।
जब दोनों char[]
और Integer
संस्करण उपलब्ध होते हैं, तो दोनों की तुलना में अधिक विशिष्ट होते हैं, Object
लेकिन कोई भी अन्य की तुलना में अधिक विशिष्ट नहीं है, इसलिए जावा यह तय नहीं कर सकता है कि किसको कॉल करना है। इस मामले में आपको स्पष्ट रूप से उल्लेख करना होगा कि आप किस तर्क को उपयुक्त प्रकार से कॉल करके कॉल करना चाहते हैं।
ध्यान दें कि व्यवहार में यह समस्या शायद ही कभी और अधिक हो सकती है। इसका कारण यह है कि यह केवल तब होता है जब आप स्पष्ट रूप null
से किसी विशिष्ट-विशिष्ट प्रकार (जैसे जैसे Object
) के चर के साथ एक विधि कह रहे हों ।
इसके विपरीत, निम्नलिखित आह्वान पूरी तरह से अस्पष्ट होगा:
char[] x = null;
doSomething(x);
हालाँकि आप अभी भी मान पास कर रहे हैं null
, जावा को पता है कि किस विधि से कॉल करना है, क्योंकि यह चर के प्रकार को ध्यान में रखेगा।
Integer
करने के लिए बदल जाते हैंint
।