2015-02-12 16 views
7

null एक संदर्भ है और यह केवल null प्रकार है, यानी null ऑब्जेक्ट प्रकार नहीं है। लेकिन, जब मैं निम्न कोड स्निपेट चलाता हूं तो मुझे आश्चर्य हुआ कि जब मैं विधि method(null); पर शून्य पास करता हूं तो यह method(String s)method(Object o) पर कॉल करता है।नल संदर्भ प्रकार का है, क्या यह एक स्ट्रिंग संदर्भ या ऑब्जेक्ट संदर्भ है?

यदि null स्वयं जावा द्वारा परिभाषित एक प्रकार है और ऑब्जेक्ट प्रकार नहीं है, तो यह method(String s)method(Object o) क्यों नहीं कहता है?

public class Test { 
    public static void main(String[] args) { 
     method(null); 
    } 
    public static void method(Object o) { 
     System.out.println("Object impl"); 
    } 
    public static void method(String s) { 
     System.out.println("String impl"); 
    } 
} 

संपादित

मैं एक और विधि जोड़ लिया है:

public static void method(Integer s) { 
    System.out.println("String impl11"); 
} 

अब संकलक त्रुटि The method method(Object) is ambiguous for the type Test देता है।

Integer a = null; 

यदि यह कानूनी है, तो मुझे संकलन-समय अपवाद क्यों दिखाई देता है?

+0

भी http://stackoverflow.com/questions/28470540/does-this-mean-null-equals-nullpointerexception –

+0

@ThomasStets देख मैं इसे dublicate qustion – Priya

+0

@Priya यह है भी नहीं मिलता है। प्रश्न पढ़ें, यह अलग-अलग प्रकार के विधि पैरामीटर को छोड़कर, वही चीज़ पूछता है। – BackSlash

उत्तर

11

null किसी भी संदर्भ प्रकार के लिए असाइन करने योग्य है। जब विधि ओवरलोडिंग की बात आती है, तो संकलक हमेशा विधि को अधिक विशिष्ट तर्क प्रकारों के साथ पसंद करता है। इसलिए String तर्क के साथ विधि Object तर्क के साथ विधि पर प्राथमिकता दी जाती है, क्योंकि StringObject का उप-वर्ग है।

यदि दूसरी तरफ, विकल्प असंबद्ध तर्क प्रकारों के तरीकों के बीच था - उदाहरण के लिए method(String s) और method (Integer i) - कोड संकलन पास नहीं करेगा, क्योंकि किसी भी विकल्प को दूसरे पर प्राथमिकता नहीं होगी।

+0

मैंने अपना qustion – Priya

+0

संपादित किया है @Priya मैंने आपके संपादन को संबोधित करने के लिए पहले से ही जवाब संपादित किया है। – Eran

+0

का अर्थ है 'स्ट्रिंग',' इंटीगर' ..... ऑब्जेक्ट क्लास के उपखंड हैं, इसीलिए संकलक ने किस विधि को कॉल करने के लिए भ्रमित किया है, क्या यह सही है? – Priya

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