2011-04-24 18 views
5

आंतरिक वर्ग कक्षा के भीतर परिभाषित कक्षा है, और आंतरिक वर्ग को सार्वजनिक, निजी, संरक्षित के रूप में घोषित किया जा सकता है। यदि आंतरिक वर्ग निजी और संरक्षित के रूप में परिभाषित किया गया है, तो क्या बाहरी कक्षा आंतरिक वर्ग के सदस्यों तक पहुंच सकती है? और बाहरी वर्ग के आंतरिक वर्ग के सदस्यों को एक्सेस कर सकते हैं?क्या बाहरी कक्षा आंतरिक कक्षा के सदस्यों तक पहुंच सकती है?

+9

क्या आपने कोशिश की है? यह संभवतः इन तरह की चीजों की कोशिश कर रहा है। – whirlwin

उत्तर

13

तो भीतरी वर्ग निजी रूप में परिभाषित किया और रक्षा की, कर सकते हैं बाहरी कक्षा एक्सेस भीतरी वर्ग के सदस्यों?

हां। ये क्वालीफायर केवल बाहरी वर्ग से प्राप्त कक्षाओं में भीतरी कक्षा की दृश्यता को प्रभावित करेंगे।

आंतरिक कक्षा बाहरी कक्षा के सदस्यों तक पहुंच सकते हैं?

हां, जिसमें private घोषित किए गए हैं, जैसा कि कोई भी उदाहरण विधि हो सकती है।

+0

क्या हम आंतरिक वर्ग –

+0

@ मुहम्मदबाबर की वस्तु से सीधे आंतरिक वर्ग विधियों को सीधे कॉल कर सकते हैं, मैंने इसे करने का प्रयास किया, और इसने मुझे एंड्रॉइड 'में पढ़ने की कोशिश की फील्ड 'int com.backspace.memebook.MainActivity $ MyTask.counter' से एक शून्य ऑब्जेक्ट संदर्भ पर ' – light

1

"एक नेस्टेड वर्ग एक वर्ग एक और वर्ग के भीतर परिभाषित, तो है। एक नेस्टेड वर्ग अपने संलग्नित क्लास की सेवा के लिए ही मौजूद होना चाहिए। एक नेस्टेड वर्ग कुछ अन्य संदर्भ में उपयोगी होगा यह होना चाहिए । एक शीर्ष स्तर वर्ग नेस्ट वर्गों के चार प्रकार के होते हैं हो:। स्थिर सदस्य कक्षाएं, nonstatic सदस्य कक्षाएं, गुमनाम कक्षाएं, और स्थानीय वर्गों को छोड़कर सभी पहली तरह भीतरी वर्ग के रूप में जाना जाता है "।

(यहोशू बलोच, पुस्तक प्रभावी जावा से।)

अपने प्रश्नों के लिए के रूप में: यह अपने आप से परीक्षण करने के लिए बहुत आसान है। लेकिन जवाब हां है (यहां तक ​​कि private सदस्यों के लिए), जब तक कि आप एक स्थैतिक संदर्भ से एक गैर-स्थैतिक सदस्य (संदर्भ के अलावा) तक पहुंचने की कोशिश नहीं कर रहे हैं, या किसी ऐसे सदस्य तक पहुंचने का प्रयास कर रहे हैं जो एक पहुंच योग्य दायरे में है ।

यही है, जैसा कि कोई उम्मीद करेगा =)।

21

सामान्य रूप से, आप (आंतरिक कक्षाओं पर निजी क्षेत्रों तक पहुंच सकते हैं और इसके विपरीत)। निम्नलिखित कोड ग्रहण के तहत संकलित:

public class Outer { 

    private int x; 

    public void f() { 
    Inner inner = new Inner(); 
    inner.g(); 
    inner.y = 5; 
    } 

    private class Inner { 
    private int y; 

    public void g() { x = 5; } 
    }  
} 

कहा कि आप कॉन्फ़िगर कर सकते अपने आईडीई/संकलक के इलाज के लिए इस तरह के क्षेत्रों को एक्सेस करता है त्रुटियों (ग्रहण में इस सेटिंग को "एक संलग्न प्रकार के सदस्य गैर सुलभ तक पहुंच कहा जाता है ", प्राथमिकताओं के तहत -> जावा -> कंपाइलर -> त्रुटि/चेतावनी -> कोड शैली)

+0

के ऑब्जेक्ट द्वारा आंतरिक वर्ग @ हिप्पो –

1

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

InnerClass.staticInnerField 

इसे उपयोग करने में ही आप से सीधे भीतरी वर्ग से बाहरी वर्ग के स्थिर क्षेत्रों तक पहुँच सकते हैं की जरूरत है खेतों के नाम।

0

स्पष्टीकरण नियमित आंतरिक वर्ग के संदर्भ में

आप आंतरिक वर्ग सीधे से बाहरी वर्ग के किसी भी क्षेत्र का उपयोग कर सकते [नियमित इनर क्लासों स्थिर सदस्यों उन्हें अंदर घोषित नहीं हो सकता] है।

class Outer { 
    private static int x = 0; 

    class Inner { 
    void print() { 
     System.out.println(x); // x can be directly accessed 
    } 
    } 

    public static void main(String[] args) { 
    new Outer().new Inner().print(); 
    } 
} 

यहां तक ​​कि बाहरी कक्षा भीतरी कक्षा के किसी भी क्षेत्र तक पहुंच सकती है लेकिन आंतरिक वर्ग की वस्तु के माध्यम से।

class Outer { 
    private class Inner { 
    private int x = 10; 
    } 

    void print() { 
    Inner inner = new Inner(); 
    System.out.println(inner.x); 
    } 

    public static void main(String[] args) { 
    Outer outer = new Outer(); 
    outer.print(); 
    } 
} 
संबंधित मुद्दे