2011-10-31 9 views
5
interface Test { 
public void test(); 
} 

public class TestMain { 
private String h = "AAA"; 

public static void main(String[] args) { 
    TestMain t = new TestMain(); 
} 

public TestMain() { 
    Test t = new Test() { 
     public void test() { 
      System.out.println(h); 
     } 
    }; 

    t.test(); 
} 

} 

उपरोक्त स्रोत अच्छी तरह से काम करता है।जावा अज्ञात वर्ग और पहुंच योग्य निजी चर

लेकिन मुझे लगता है कि परिवर्तनीय 'एच' अज्ञात वर्ग से पहुंच योग्य नहीं होना चाहिए। मुझे यह जानने की ज़रूरत है कि यह अच्छी तरह से क्यों काम करता है।

आपकी सभी मदद के लिए अग्रिम धन्यवाद!

उत्तर

7

गैर-स्थैतिक आंतरिक वर्ग के प्रत्येक उदाहरण में उदाहरण संलग्न है - बाहरी वर्ग का एक उदाहरण जो इसे आंतरिक वर्ग ऑब्जेक्ट में संग्रहीत संदर्भ चर के माध्यम से बंधे हैं। उस संदर्भ के माध्यम से आंतरिक वर्ग वस्तु के लिए उपलब्ध संलग्न उदाहरण के सभी सदस्य।

कंपाइलर निश्चित रूप से उस संदर्भ चर को जोड़ने का ख्याल रखता है, साथ ही साथ कुछ विशेष एक्सेसर फ़ंक्शंस जो बाहरी वर्ग ऑब्जेक्ट बाहरी वर्ग ऑब्जेक्ट के निजी सदस्यों तक पहुंचने के लिए उपयोग कर सकते हैं। आप javap -c का उपयोग कर बाहरी वर्ग को अलग करके इन एक्सेसर फ़ंक्शंस को देख सकते हैं।

-1

एक नेस्टेड क्लास अपनी संलग्न कक्षा का सदस्य है। गैर स्थैतिक घोंसले वर्ग (आंतरिक कक्षाओं) में संलग्न वर्ग के अन्य सदस्यों तक पहुंच है, भले ही उन्हें निजी घोषित किया गया हो। स्टेटिक नेस्टेड कक्षाओं में संलग्न वर्ग के अन्य सदस्यों तक पहुंच नहीं है।

+1

स्टेटिक नेस्टेड कक्षाओं में कक्षा के निजी स्थिर सदस्यों तक पहुंच है। –

+0

हाँ, यह सही है, मेरा मतलब है "संलग्न वर्ग के गैर स्थिर सदस्यों तक पहुंच नहीं है" – PaganSensei

+0

@ संदीपराजजी: अभी भी सही नहीं है। संलग्न वर्ग के एक उदाहरण को देखते हुए - यानी, यदि यह एक विधि तर्क के रूप में प्राप्त करता है, या अपने आप में से एक बनाता है - एक स्थैतिक घोंसला वर्ग उस उदाहरण के निजी सदस्यों तक पहुंच सकता है। –

1

निजी सदस्यों तक पहुँच निर्धारित करने के लिए बुनियादी नियम section 6.6.1 of the Java Language Specification के अनुसार, यह है:

[मैं] के सदस्य या निर्माता च निजी घोषित किया जाता है, तो पहुँच की अनुमति दी है तभी यह शरीर के भीतर होती है, तो शीर्ष स्तर की कक्षा में जो सदस्य या कन्स्ट्रक्टर की घोषणा को संलग्न करता है।

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