2013-06-19 11 views
12

मेरे कोड में आंतरिक कक्षा है। मैं अपने उदाहरणों तक सार्वजनिक पहुंच देना चाहता हूं, लेकिन केवल बाहरी वर्ग को "निजी" पहुंच की तरह, इस उदाहरण बनाने में सक्षम होना चाहिए। क्या यह ठीक से छोटे पैकेज (या ऐसी हर आंतरिक कक्षा के लिए सार्वजनिक इंटरफ़ेस बनाना) के बिना संभव है?जावा - आंतरिक वर्ग कन्स्ट्रक्टर - बाहरी वर्ग के लिए केवल

(माफ करना अगर मेरी अंग्रेजी बुरा है: पी)

उत्तर

23

यह संभव है। अपने आंतरिक वर्ग सार्वजनिक घोषित करें, लेकिन इसके निर्माता निजी। इस तरह आप इसे केवल अपनी संलग्न कक्षा के भीतर ही बना सकते हैं, लेकिन बाहर से नहीं।

+1

वास्तव में बाहरी वर्ग के आंतरिक वर्ग के निजी क्षेत्र तक पहुंच है? यह जानना अच्छा है कि यह काम करता है, धन्यवाद! –

+0

तो यह समाधान गलत है? –

+1

नहीं, यह समाधान सही है, बाहरी वर्ग आंतरिक वर्गों के सभी निजी क्षेत्रों, विधियों और रचनाकारों को देख सकता है। – WilQu

1

डिफ़ॉल्ट रूप से, आप आंतरिक वर्ग आप पहली बार बाहरी वर्ग की आवश्यकता के कहने प्राप्त करना चाहते हैं।

inner class इसकी संलग्न कक्षा का सदस्य है।

आपको इसके लिए कुछ भी करने की आवश्यकता नहीं है।

गैर स्थिर नेस्टेड वर्गों (भीतरी वर्ग) संलग्नित क्लास के अन्य सदस्यों के लिए उपयोग, भले ही वे निजी

मुझे आशा है कि मैं सही तरीके से अपने प्रश्न समझ में आ घोषित कर रहे हैं।

कृपया refer.

+0

निर्माता केवल बाहरी वर्ग (ताकि सार्वजनिक नहीं किया जा सकता) के लिए उपलब्ध होना चाहिए, लेकिन यह इस का उपयोग करना संभव होना चाहिए बाहरी से बाहर वस्तु (इसलिए वर्ग निजी नहीं हो सकता है)। –

0

तो आंतरिक कक्षा के private बनाएं।

public class Outer { 
    private class Inner {} 
     public String foo() { 
      return new Inner().toString(); 
     } 
} 

आप कानूनी तौर पर निजी डिफ़ॉल्ट निर्माता फोन नहीं कर सकते हैं क्योंकि यह निजी है

+0

जब आंतरिक निजी होता है, तो मैं इसे बाहरी से बाहर नहीं कर सकता। मैं इस कक्षा के लिए सार्वजनिक इंटरफ़ेस विशिष्ट बना सकता हूं, लेकिन यदि बेहतर एक मौजूद है, तो मैं इस समाधान से बचना चाहता हूं। –

+0

यह आपके प्रश्न का समाधान है 'केवल बाहरी वर्ग इस उदाहरण को बनाने में सक्षम होना चाहिए'। क्या आप अपने प्रश्न का विस्तार कर सकते हैं कि आप वास्तव में क्या चाहते हैं !! यह स्पष्ट नहीं है। – iMBMT

+0

केवल 'बाहरी' ऑब्जेक्ट में 'इनर' के निर्माण उदाहरणों तक पहुंच होनी चाहिए। क्या यह अभी स्पष्ट है? माफ़ कीजिये :) –

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