2015-11-20 11 views
8

नोट: यह एक स्व-उत्तरदायी प्रश्न है। यह एक बहुत ही सरल हो सकता है लेकिन मैंने सोचा कि यह साझा करने लायक होगा।अज्ञात वर्ग के कन्स्ट्रक्टर का एक्सेस संशोधक क्या है?

मान लीजिए मैं एक गुमनाम वर्ग घोषणा की है:

MyObject myObj1 = new MyObject() { 

}; 

जहां MyObject है:

class MyObject { 

    public MyObject() { // explicit public constructor 
    } 

    ... 
} 

जावा भाषा विशिष्टता (जोर मेरा) की this section से:

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

अगर मैं public कंस्ट्रक्टर्स की संख्या प्राप्त करने की कोशिश:

// Number of public constructors; prints 0 
System.out.println(myObj1.getClass().getConstructors().length); 

यह शून्य प्रिंट के रूप में उम्मीद है, यानी गुमनाम निर्माता public नहीं है।

यह भी नहीं private है, क्योंकि अगर हम एक ही पैकेज में एक अलग कक्षा से निम्न जहां गुमनाम वर्ग (उदाहरण के myObj1 आसपास पारित करके) परिभाषित किया गया है कहते हैं:

myObj1.getClass().getDeclaredConstructor().newInstance(); 

इसके बिना पूरा करता है एक IllegalAccessException

अज्ञात वर्ग में अंतर्निहित कन्स्ट्रक्टर का एक्सेस संशोधक क्या है?

+0

क्या आपने इस जांच को करने के लिए प्रेरित किया? – dnault

+0

@dnault मैं सिर्फ एक अज्ञात वर्ग के (वैचारिक) उपयोग को सिंगलटन के रूप में सोच रहा था और निर्माता के बारे में सोचा था। – manouti

+0

इससे क्या फर्क पड़ता है? आप इसे कॉल नहीं कर सकते – EJP

उत्तर

9

अज्ञात कन्स्ट्रक्टर default constructor के समान कार्य करता है कि संकलक सामान्य श्रेणी के लिए भी बनाता है जो रचनाकारों की घोषणा नहीं करता है। इस मामले में:

एक वर्ग प्रकार में, अगर वर्ग public घोषित किया जाता है, तो डिफ़ॉल्ट निर्माता परोक्ष पहुँच संशोधक दिया जाता है public (§6.6); यदि कक्षा protected घोषित की जाती है, तो डिफ़ॉल्ट कन्स्ट्रक्टर को स्पष्ट रूप से एक्सेस संशोधक protected (§6.6) दिया जाता है; यदि कक्षा private घोषित की जाती है, तो डिफ़ॉल्ट कन्स्ट्रक्टर को स्पष्ट रूप से एक्सेस संशोधक private (§6.6) दिया जाता है; अन्यथा, डिफ़ॉल्ट कन्स्ट्रक्टर के पास कोई एक्सेस मॉडिफायर द्वारा निहित डिफ़ॉल्ट पहुंच है।

दूसरे शब्दों में, गुमनाम निर्माता गुमनाम वर्ग के रूप में एक ही पैकेज में ही उपलब्ध है।

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