2009-12-16 13 views
37

जावा शीर्ष स्तर की कक्षा को निजी के रूप में घोषित करने की अनुमति क्यों देता है? क्या "कोई निजी वर्ग तक नहीं पहुंच सकता" के अलावा कोई अन्य कारण है?जावा: हम एक शीर्ष स्तर की कक्षा को निजी क्यों परिभाषित कर सकते हैं?

+14

क्या आपका मतलब है कि हम एक शीर्ष स्तर की कक्षा को निजी रूप से परिभाषित नहीं कर सकते हैं? – Joel

उत्तर

53

ठीक है, आप नहीं कर सकते। एक शीर्ष-स्तरीय वर्ग निजी रूप से बेकार होगा क्योंकि इसके लिए कुछ भी नहीं होगा।

+1

जरूरी नहीं कि सच है। कक्षा के ऊपर पहुंच स्तर एक पैकेज है। वर्ग को केवल पैकेज में स्कॉप्ड किया जा सकता है, अन्य पैकेजों तक पहुंच को अस्वीकार कर दिया जा सकता है। – stevebot

+16

@stevebot मुझे लगता है कि 'संरक्षित' –

+10

@ मुहम्मदबाबर वास्तव में कहा जाता है, 'संरक्षित' कक्षाओं के लिए एक कानूनी संशोधक नहीं है। किसी वर्ग को केवल अपने पैकेज में "स्कॉप्ड" होने के लिए, आप बस किसी भी संशोधक ('सार्वजनिक' के विपरीत) निर्दिष्ट नहीं करेंगे –

19

जावा शीर्ष स्तर की कक्षा को निजी होने की अनुमति नहीं देता है। केवल 'सार्वजनिक' या 'पैकेज'।

5

सिद्धांत रूप में, आप का दृष्टांत सकता है और फोन एक private शीर्ष स्तर के वर्ग पर तरीकों (अगर ऐसी बात भाषा ... जो यह नहीं है द्वारा अनुमति दी गई!), लेकिन आप प्रतिबिंब का उपयोग करना होगा यह करने के लिए। स्पष्ट रूप से (आईएमओ) सूर्य ने फैसला किया कि निजी स्तर के वर्ग भाषा स्तर पर समर्थन करने के लिए एक अच्छी बात नहीं थी।

असल में, यह संभव है कि JVM बाइटकोड जादू द्वारा बनाए गए शीर्ष-स्तरीय निजी "वर्ग" का समर्थन कर सके। लेकिन यह करने के लिए एक उपयोगी बात नहीं है।


अद्यतन - वास्तव में, current JVM spec यह स्पष्ट करता है कि एक वर्ग के लिए पहुँच झंडे शब्द के ACC_PRIVATE बिट "भविष्य में उपयोग हेतु आरक्षित" है, और जावा कार्यान्वयन के रूप में सेट किए बिना व्यवहार करना चाहिए कि। इस प्रकार, उपर्युक्त अनुमान किसी भी JVM के लिए म्यूट है जो वर्तमान विनिर्देश को सख्ती से लागू करता है।

1

उस वर्ग या उसके सदस्यों तक पहुंचने का कोई तरीका नहीं होगा।

9

मेरा मानना ​​है कि एक बेहतर सवाल होगा:

क्या यह एक शीर्ष स्तर वर्ग निजी होने के लिए मतलब होगा?

यदि आप पहुंच स्तर के मामले में सोचते हैं, तो कक्षा के ऊपर का स्तर पैकेज है। वास्तव में आप जावा में पैकेज निजी शीर्ष स्तर के वर्ग हो सकता है! Oracle (formerly Sun) Java tutorials से ले रहा है: एक वर्ग नहीं संशोधक (डिफ़ॉल्ट, यह भी पैकेज-निजी के रूप में जाना जाता है) है

, तो वह केवल अपनी ही पैकेज में दिखाई देता है (संकुल संबंधित वर्गों के समूहों नाम हैं - आप के बारे में सीखना होगा उन्हें बाद के पाठ में।)

मैंने पूछा प्रश्न के उत्तर के आधार पर, यह "शीर्ष स्तर की निजी कक्षा" की आपकी परिभाषा के अनुरूप हो सकता है।

4

निजी कक्षाओं की अनुमति है, लेकिन केवल आंतरिक या घोंसले वाले वर्गों के रूप में। यदि आपके पास निजी आंतरिक या घोंसला वाली कक्षा है, तो उस बाहरी वर्ग के दायरे तक पहुंच प्रतिबंधित है।

यदि आपके पास शीर्ष स्तर की कक्षा के रूप में निजी श्रेणी है, तो आप इसे कहीं से भी एक्सेस नहीं कर सकते हैं। इसलिए यह शीर्ष स्तर की निजी कक्षा के लिए समझ में नहीं आता है।

2

हम बाहरी वर्ग को निजी के रूप में घोषित नहीं कर सकते हैं। अधिक सटीक हम बाहरी वर्ग के साथ निजी पहुंच विनिर्देश का उपयोग नहीं कर सकते हैं। जैसे ही आप कक्षा के साथ निजी एक्सेस विनिर्देशक का उपयोग करने का प्रयास करेंगे, आपको एक्लिप्स में एक त्रुटि के रूप में एक संदेश मिलेगा जो केवल सार्वजनिक, अंतिम, सार का उपयोग क्लास के साथ एक्सेस संशोधक के रूप में किया जा सकता है।

कक्षा को निजी बनाना कोई समझ नहीं आता है क्योंकि हम इसके वर्ग के कोड तक नहीं पहुंच सकते हैं।

0

आप एक शीर्ष स्तरीय वर्ग निजी (या जनता के अलावा कुछ भी नहीं) परिभाषित नहीं कर सकते हैं। आपको एक संकलन त्रुटि मिलेगी।

Something.java:6: error: modifier private not allowed here 
private class Something { 
     ^
1 error 

आप केवल दो विकल्प, सार्वजनिक या पहुँच नहीं संशोधक बिल्कुल। सार्वजनिक रूप से आपको छोड़कर, स्पष्ट रूप से, पैकेज के भीतर कक्षा तक पहुंच सीमित करें (उर्फ: पैकेज-प्राइवेट)।

1

इस बारे में एक सरल समझ की आवश्यकता है कि जावा में कक्षाओं को निजी घोषित करने की आवश्यकता क्यों नहीं है। यदि आपकी कक्षा स्वयं एक स्टैंडअलोन प्रोग्राम/सॉफ़्टवेयर है (जो बेहद असंभव है) तो आप इसे पहले से ही एक प्रोजेक्ट और इसके लिए विशिष्ट पैकेज में परिभाषित कर चुके होंगे। तो निजी कीवर्ड जोड़ना इसके लिए अनावश्यक है। यदि ऐसा नहीं है तो डिफ़ॉल्ट पहुंच तब होती है इसका मतलब है कि आपका प्रोग्राम/सॉफ्टवेयर चलाने के लिए विभिन्न वर्गों पर निर्भर करता है। यदि हम उनमें से एक वर्ग को निजी के रूप में घोषित कर रहे हैं (अगर हम कर सकते हैं) तो हम अन्य वर्गों द्वारा अपनी पहुंच को सीमित कर रहे हैं, जिसका कोई उपयोग नहीं है। इसका मतलब यह है कि हमारे द्वारा निजी रूप से घोषित वर्ग कोड चलाने के लिए कोई उपयोग नहीं है। जो फिर से इसे बेकार प्रदान करता है। यदि आपके पास पैकेज स्तर पहुंच का मतलब है तो डिफ़ॉल्ट पहुंच के लिए हमें इससे पहले कोई भी कीवर्ड घोषित करने की आवश्यकता नहीं है।

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

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