java - Is it necessary to instantiate an object of the outer class when only the inner class object is needed? -


मेरे भीतर का एक वर्ग है जो मेरी कक्षा में Runnable का कार्यान्वयन है I

जैसा कि मैंने अपने आवेदन को डिबग कर रहा था मैंने देखा कि मेरे भीतर के वर्ग के किसी वस्तु का तात्पर्य भी बाहरी के कन्स्ट्रक्टर को आह्वान करता है।

अच्छा, यह तब होना चाहिए जब से मैं इस तरह के ऑब्जेक्ट को तत्काल प्रदान कर रहा हूं:

  नया बाहरी क्लास ()। नया इनरक्लास (...)  

और यह स्पष्ट है कि कॉल OuterClass ()

मेरा कटौती यह है कि प्रत्येक InnerClass ऑब्जेक्ट के लिए OuterClass का एक नया ऑब्जेक्ट बनाया गया है। तो मेरा सवाल यह है कि हर बार एक नया बाहरी क्लास ऑब्जेक्ट बनाना जरूरी है? क्या बाहरी कक्षा के ऑब्जेक्ट का निर्माण नहीं करने के लिए ऊपर के बगल में कोई अन्य तरीका है?

मेरी बाहरी कक्षा में केवल स्थिर सदस्य हैं, इसलिए मुझे लगता है कि इन्हें ओवरहेड लगता है ऑब्जेक्ट सृजन छोटा है, लेकिन सवाल बाकी है?

पीएस 1 प्रयोग के बाद मैंने पाया कि मैं 1 बाहरी कक्षा ऑब्जेक्ट के साथ कई आंतरिक कक्षा ऑब्जेक्ट बना सकता हूँ। तो क्या बेहतर है कि सिर्फ एक "डमी" बाहरी वर्ग ऑब्जेक्ट बनाएं और वहां से अंदरूनी कक्षा ऑब्जेक्ट कन्स्ट्रक्टर को बुलाएं?

PS2 आगे के प्रयोग के बाद मुझे पता चला कि अगर आंतरिक कक्षा स्थिर है तो मैं एक नया इस तरह की आंतरिक वस्तु:

  InnerClass = नया OuterClass.InnerClass ();  

लेकिन यह पसंद नहीं है (यह मेरा पहला प्रयास था):

  InnerClass = OuterClass.new InnerClass () में;  

ऐसा क्यों है (इतना महत्वपूर्ण नहीं)? मुझे लगता है कि इसका अर्थ है कि इस मामले में कोई बाहरी वस्तु नहीं बनाई गई है, ठीक है?

क्या हर बार एक नया बाहरी क्लास ऑब्जेक्ट बनाना आवश्यक है?

हाँ, यह आवश्यक है जब तक कि आप आंतरिक कक्षा को स्थैतिक इनर क्लास के रूप में बदल दें। तो आप इस तरह से कुछ का उपयोग कर सकते हैं

  OuterClass.StaticNestedClass नेस्टेड ऑब्जेक्ट = नया OuterClass.StaticNestedClass ();  

अब हमें गैर-स्थैतिक आंतरिक वर्ग तात्कालिकता के लिए बाहरी कक्षा ऑब्जेक्ट की आवश्यकता क्यों है?

A < कोड> गैर-स्थिर आंतरिक वर्ग इसके संलग्न वर्ग के एक उदाहरण के साथ जुड़ा हुआ है और उस ऑब्जेक्ट के विधियों और खेतों तक सीधी पहुंच होती है।

एक आंतरिक वर्ग के रूप में एक उदाहरण के साथ जुड़ा हुआ है, ताकि आंतरिक कक्षा को इन्स्तांत करने के लिए, आपको पहले बाहरी कक्षा को शुरू करना चाहिए। फिर, इस सिंटैक्स के साथ बाहरी ऑब्जेक्ट के अंदर बाहरी ऑब्जेक्ट बनाएँ:

OuterClass.InnerClass आंतरिकओबैक्ट = बाहरी ऑब्जेक्ट.न्यू इनरक्लास ();


Comments

Popular posts from this blog

sqlite3 - UPDATE a table from the SELECT of another one -

c# - Showing a SelectedItem's Property -

javascript - Render HTML after each iteration in loop -