2011-01-12 17 views
15

मेरे पास दो अलग-अलग पैकेजों में दो कक्षाएं हैं। एक वर्ग के लिए मैंने इसके लिए एक्सेस संशोधक सेट किए बिना एक कन्स्ट्रक्टर को परिभाषित किया है। मैं इस वर्ग के किसी ऑब्जेक्ट को किसी अन्य पैकेज में चालू करना चाहता हूं और त्रुटि 'the constructor xxx() is not visible' प्राप्त करना चाहता हूं।जावा कन्स्ट्रक्टर डिफ़ॉल्ट रूप से सार्वजनिक नहीं हैं?

यदि मैं public में संशोधित पहुंच को परिभाषित करता हूं तो यह ठीक है। मैंने सोचा कि रचनाकार डिफ़ॉल्ट रूप से सार्वजनिक हैं?

+0

क्लास कन्स्ट्रक्टर डिफ़ॉल्ट रूप से पैकेज-प्राइवेट हैं। Enum रचनाकार डिफ़ॉल्ट रूप से निजी हैं। – Boann

उत्तर

18

पहुँच नहीं विनिर्देशक! = सार्वजनिक

कोई संशोधक पैकेज निजी है। doc

+0

उत्तर ठीक है लेकिन लिंक किए गए दस्तावेज़ में डिफ़ॉल्ट c'tors का उल्लेख नहीं है। –

+1

@Bob क्या आपने _no modifier_ देखा था? –

+0

लेकिन इंटरफेस में सभी विधियां सार्वजनिक सार हैं, भले ही आप सार्वजनिक हों या नहीं –

13

नहीं, वे नहीं हैं। उनके पास डिफ़ॉल्ट रूप से पैकेज-दृश्यता है।

2

जब आप एक्सेस संशोधक नहीं लिखते हैं तो यह डिफ़ॉल्ट पर सेट होता है, जिसका अर्थ पैकेज निजी है। जैसे पैकेज के बाहर कोई कक्षा इसे एक्सेस नहीं कर सकती है।

1

नहीं। उनके पास डिफ़ॉल्ट पहुंच विनिर्देशक है। यानी उनके पास पैकेज दृश्यता है।

1

आप कन्स्ट्रक्टर की घोषणा में एक्सेस संशोधक का उपयोग कर सकते हैं ताकि अन्य वर्ग कन्स्ट्रक्टर को कॉल कर सकें। यदि आप कन्स्ट्रक्टर को स्पष्ट रूप से सार्वजनिक रूप से घोषित नहीं करते हैं तो यह केवल उसी पैकेज में दिखाई देता है जहां इसे घोषित किया गया था (पैकेज एक्सेस)

7

एक्सेस (त्रुटि ...) डिफ़ॉल्ट रूप से डिफ़ॉल्ट पहुँच डिफ़ॉल्ट रूप से है। पैकेज निजी के रूप में भी जाना जाता है। विचार करें: यदि वे डिफ़ॉल्ट रूप से public थे, तो आप कैसे इंगित करेंगे कि एक निर्माता public नहीं था लेकिन वास्तव में पैकेज निजी था? निजी पैकेज के अनुरूप कोई कीवर्ड नहीं है जिसके साथ इसे इंगित किया जाए।

1

कक्षा में एक्सेस संशोधक के बिना सभी विधियों में पैकेज दृश्यता है। हालांकि, इंटरफेस विधियों में हमेशा सार्वजनिक दृश्यता होती है।

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