यह मेरे लिए अस्पष्ट नहीं है। शायद अगर हम चश्मा के माध्यम से कंघी करते हैं तो हमें सबूत मिलेंगे कि आंतरिक वर्गों को सामान्य कक्षाओं के समान माना जाना चाहिए। हालांकि भावना में, एक आंतरिक वर्ग बाहरी उदाहरण पर निर्भर करता है, कक्षा उदाहरण से परे मौजूद नहीं है। यह "सामान्य" वर्गों से अलग है जिसका अस्तित्व मूल रूप से शाश्वत है। पाठ्यक्रम के दो बाहरी उदाहरणों के दो आंतरिक वर्ग एक दूसरे से संबंधित हैं, एक ही स्रोत कोड द्वारा बनाए जा रहे हैं, फिर भी इसका मतलब यह नहीं है कि वे समान या बराबर होना चाहिए।
इस बात का प्रमाण है कि जावा डिजाइनर इस तरह से इरादा रखते हैं कि आत्मा में एक आंतरिक वर्ग बाहरी उदाहरण के दायरे में रहता है। उदाहरण के लिए, उत्सुक वाक्यविन्यास outerInstance.new InnerClass()
। उदाहरण के लिए, कोई स्थैतिक चर नहीं, आंतरिक कक्षाओं के लिए कोई स्थिर प्रारंभकर्ता नहीं। कक्षा अनलोडिंग [1] की चर्चा में, हम देखते हैं कि तर्क वास्तव में आंतरिक कक्षाओं पर लागू नहीं होता है, यह कल्पना की जा सकती है कि आंतरिक कक्षाओं को उतार दिया जा सकता है! यह कल्पना की जा सकती है कि एक वीएम प्रत्येक नए बाहरी उदाहरण के लिए एक नई आंतरिक कक्षा बनाता है।
व्यावहारिक रूप से यह मामला नहीं है, आंतरिक वर्गों को वास्तव में सामान्य कक्षाओं के समान माना जाता है। लेकिन अवधारणात्मक रूप से, मैं हमेशा उनके बारे में अलग-अलग सोचूंगा, उदाहरण के लिए-निजी वर्ग।
[1] http://java.sun.com/docs/books/jls/third_edition/html/execution.html#12.7
अद्यतन: करने के लिए [2]
दो संदर्भ प्रकार एक ही रन-टाइम प्रकार के होते हैं, तो वे ... एक ही द्विआधारी नाम
है अनुसार
और [3]
अज्ञात वर्ग (§15.9.5) का बाइनरी नाम शामिल है इसके तत्काल संलग्न प्रकार का बाइनरी नाम, उसके बाद $ के बाद, अंकों के एक खाली खाली अनुक्रम के बाद।
तो एक अज्ञात वर्ग में एक बाइनरी नाम है, इसलिए केवल एक रन-टाइम प्रकार है। Spec हमें गारंटी देता है कि एक अज्ञात वर्ग के विभिन्न उदाहरणों में पहचान वर्ग है।
[2] http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.3.4
[3] http://java.sun.com/docs/books/jls/third_edition/html/binaryComp.html#44909
धन्यवाद, मुझे लगता है कि मुझे लगता है कि समझते हैं, लेकिन यह कई वर्गों बनाने की आवश्यकता होगी - अगर मैं सही ढंग से समझ। सवाल एक अज्ञात आंतरिक वर्ग के लिए कोड दिया गया है, क्या आप इसकी वस्तुओं के कई उदाहरण बना सकते हैं? और मेरा मतलब यह नहीं है कि एक लूप का उपयोग करना, फिर से, यह कई वर्गों का निर्माण करेगा --- ओह, आपकी टिप्पणी कहां जाएगी? –
मुझे लगता है कि आप अपनी कक्षा के कई उदाहरणों का मतलब है? एक ऑब्जेक्ट स्वयं में एक उदाहरण है –
@ होवरक्राफ्ट, टिप्पणियों में पठनीय कोड नहीं डाल सकता है। ;) –