2013-11-28 11 views
5

मैं कश्मीर & बी पुस्तक" SCJP सूर्य प्रमाणित प्रोग्रामर जावा 6 अध्ययन गाइड के लिए "से निम्नलिखित कोड लिया "। मैं अनुमान लगाता हूं कि "3" के रूप में चिह्नित वर्ग घोषणा को "1" के रूप में चिह्नित किया गया है, जो टेस्ट इनर्स क्लास के बाहर है। यदि कक्षाएं विभिन्न पैकेजों में थीं, तो मैं पैकेज नाम के साथ उनमें से एक को अर्हता प्राप्त करके अस्पष्टता को हल कर सकता हूं। लेकिन इस मामले में कक्षाएं न केवल एक ही पैकेज में हैं बल्कि एक ही फाइल में हैं। मैं बाहरी वर्ग का उदाहरण कैसे प्राप्त कर सकता हूं?जावा इनर वर्ग पीछा बाहरी वर्ग

मैंने वही प्रश्न here देखा लेकिन स्वीकृत उत्तर का मतलब है कि पूरी चीज में एक संलग्न वर्ग को जोड़ने वाले कोड को संशोधित करना है। मेरा सवाल यह है कि किसी भी प्रकार के क्वालीफायर या संदर्भ का उपयोग करके इंस्टेंस कैसे प्राप्त करें, यदि यह भी संभव हो।

+3

यदि वे _any_ पैकेज में हैं, तो 'पी' कहें, आप // 1 के लिए 'p.A' और 'p.TestInners.A' // // 3 के लिए उपयोग कर सकते हैं। अन्यथा मुझे नहीं लगता कि उन्हें स्पष्ट रूप से संदर्भित करना संभव है। चूंकि आपको इस बिंदु (पैकेज के बिना कक्षा) तक पहुंचने के लिए कोडिंग मानकों का उल्लंघन करना होगा, हालांकि यह अभ्यास में कोई मुद्दा नहीं है। – creichen

उत्तर

4

अपने वर्ग मान लिया जाये कि पैकेज com.test में है, तुम सब करने की जरूरत है

new com.test.A().m(); 

का उपयोग वर्ग की पूरी तरह से योग्य नाम का उपयोग कर रहा है।

यदि आपकी कक्षाएं डिफ़ॉल्ट पैकेज में हैं, यानी। package घोषणा, तो आप भाग्य से बाहर हैं और बाहरी A तक नहीं पहुंच सकते हैं।

+0

* यदि कक्षाएं अलग-अलग पैकेजों में थीं, तो मैं पैकेज नाम के साथ उनमें से एक को अर्हता प्राप्त करके अस्पष्टता को हल कर सकता हूं * ओपी पहले से ही यह जानता है। प्रश्न दोबारा पढ़ें: * लेकिन इस मामले में कक्षाएं न केवल एक ही पैकेज में हैं बल्कि एक ही फाइल में हैं। मैं बाहरी वर्ग का उदाहरण कैसे प्राप्त कर सकता हूं? * –

+3

@LuiggiMendoza: मुझे लगता है कि बिंदु यह है कि भले ही वे * समान * पैकेज (और फ़ाइल) में हों, यह काम करेगा। –

+1

@ ओली क्रिसल्सवर्थ लेकिन उसके पास पैकेज नहीं है। – Domi

2

सी ++ में, आप स्पष्ट रूप से अपने प्रतीक को उपसर्ग करके वैश्विक दायरे को संबोधित कर सकते हैं :: हालांकि, जावा में ऐसी कोई चीज़ नहीं है।

तो यदि आप वास्तव में बाहरी ए प्राप्त करना चाहते हैं, तो आपको बुलेट काटने और कुछ अन्य प्रकार के घेरे को करना होगा, उदाहरण के लिए इसे किसी अन्य वर्ग या पैकेज में लपेटना।

संपादित करें: Here is another reason why

0

innner-A की वस्तु को परिभाषित करने से पहले नहीं बनाया जा सकता है। इसलिए आंतरिक श्रेणी ऑब्जेक्ट तक पहुंचने के लिए go() के अंदर innner-A को परिभाषित करने के बाद new A().m(); का उपयोग करें।

void go() { 

     class A { 
      void m() { 
       System.out.println("inner"); 
      } 
     } 
     new A().m(); 
    } 

बाहरी-ए पैकेज का नाम संलग्न करने के लिए है, डिफ़ॉल्ट पैकेज में यह बाहरी-ए तक पहुँचने के लिए असंभव है तक पहुँचने के लिए।

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