आंतरिक कक्षाएं उन वस्तुओं का प्रतिनिधित्व करने के लिए अच्छी हैं जो निजी होने या किसी भी तरह से संलग्न कक्षा से घनिष्ठ रूप से बंधी हुई हैं। कभी-कभी आंतरिक कक्षाओं का उपयोग करने के तकनीकी कारण होते हैं (उदाहरण के लिए, बंद सिमुलेटिंग)। उन्होंने नेमस्पेस प्रदूषण पर भी कटौती की।
आंतरिक कक्षाओं का एक नुकसान यह है कि यदि वे संलग्न वर्ग के निजी सदस्यों (फ़ील्ड या फ़ंक्शंस) तक पहुंचते हैं, तो संकलक उन सदस्यों को एक्सेसर फ़ंक्शन उत्पन्न करेगा। भाषा शुद्धवादियों का तर्क होगा कि क्या यह encapsulation का तोड़ना एक अच्छी बात है या एक बुरी बात है। एक्सेस फ़ंक्शंस प्रत्येक एक्सेस में थोड़ा ओवरहेड जोड़ता है (जो आमतौर पर कारक नहीं होता है, लेकिन वहां होता है)। एक और नुकसान यह है कि यह स्रोत फ़ाइल को अधिक जटिल बनाता है और इसलिए प्रबंधन करना कठिन होता है। (मुझे कभी-कभी बाहरी वर्ग में एक समारोह को संपादित करके चुराया गया है, जबकि यह सोचता है कि यह बाहरी वर्ग में था, और इसके विपरीत।) अंत में, आंतरिक कक्षाएं पुन: प्रयोज्य नहीं होती हैं, जबकि अलग-अलग वर्गों को अक्सर एकाधिक उपयोग करने के लिए पैरामीटर किया जा सकता है ।
ये पेशेवर और विपक्ष मेरे सिर के ऊपर से हैं। मुझे यकीन है कि दूसरों के पास अतिरिक्त विचार होंगे।
अद्यतन:
इस गूगल आईओ video भीतरी AsyncTask विकल्प स्पष्ट रूप से गलत रूप में विकल्प के रूप में चिह्नित किया जाता है।
स्रोत
2011-01-28 01:50:03
अलग-अलग सार्वजनिक वर्गों के रूप में उनका उपयोग करते समय मुझे लगता है कि यह अधिक उपयोगी है। – neteinstein
@NeTeInStEiN - एक AsyncTask के लिए, एक आंतरिक वर्ग (एक नेस्टेड स्थैतिक वर्ग की तुलना में) तकनीकी कारणों से हमेशा गलत होता है: AsyncTask को रोकने के बिना एक गतिविधि को मार दिया जा सकता है (कॉन्फ़िगरेशन परिवर्तन कहने के कारण)। यदि AsyncTask एक आंतरिक वर्ग था, तो यह पुरानी गतिविधि को रिसाव करेगा क्योंकि AsyncTask में बाहरी वर्ग के उदाहरण के लिए एक (छुपा) संदर्भ होगा। फोन के कुछ अभिविन्यास परिवर्तन तब प्रक्रिया को स्मृति थकावट से मरने का कारण बनेंगे। –