2009-02-27 18 views
11

क्या कोई मुझे बता सकता है कि protected/publicइनर कक्षाओं के बीच क्या अंतर है?संरक्षित/सार्वजनिक आंतरिक कक्षाएं

मुझे पता है कि public आंतरिक कक्षाएं जितनी ज्यादा हो सके से बचने के लिए हैं (जैसा कि article में बताया गया है)।

लेकिन जो मैं कह सकता हूं, उससे protected या public संशोधक के बीच कोई अंतर नहीं है।

इस उदाहरण पर एक नज़र डालें:

public class Foo1 { 
public Foo1() { } 

protected class InnerFoo { 
    public InnerFoo() { 
    super(); 
    } 
} 
} 

...

public class Foo2 extends Foo1 { 
public Foo2() { 
    Foo1.InnerFoo innerFoo = new Foo1.InnerFoo(); 
} 
} 

...

public class Bar { 
public Bar() { 
    Foo1 foo1 = new Foo1(); 
    Foo1.InnerFoo innerFoo1 = foo1.new InnerFoo(); 

    Foo2 foo2 = new Foo2(); 
    Foo2.InnerFoo innerFoo2 = foo2.new InnerFoo(); 
} 
} 

यह सब संकलित करता है तथा मान्य है मैं घोषणा कि क्या InnerFooprotected या public

मुझे क्या याद आ रही है? कृपया मुझे एक ऐसे मामले को इंगित करें जहां protected या public का उपयोग करने में कोई अंतर है।

धन्यवाद।

उत्तर

19

protected एक्सेस संशोधक उसी पैकेज और उसके उप-वर्गों के अलावा अन्य वर्गों से पहुंच प्रतिबंधित कर देगा।

दिखाए गए उदाहरण में, public और protected का एक ही प्रभाव होगा, क्योंकि वे एक ही पैकेज में हैं।

एक्सेस संशोधक के बारे में अधिक जानकारी के लिए, Controlling Access to Members of a ClassThe Java Tutorials का पृष्ठ रुचि का हो सकता है।

+0

ठीक है। मैं अपना भ्रम देखता हूं। क्योंकि आंतरिक वर्ग संलग्न वर्ग के सदस्यों की तरह हैं, मैं संरक्षित सदस्यों के संदर्भ में सोच रहा था। धन्यवाद। –

+1

@bruno conde: संरक्षित वर्ग * * संरक्षित सदस्यों की तरह हैं। –

+0

दूसरे शब्दों में, जावा में "संरक्षित", चाहे सदस्यों या आंतरिक कक्षाओं पर लागू हो, सी ++ और सी # से अलग है। यह एक ही पैकेज (नामस्थान) में अन्य कक्षाओं तक पहुंच प्रदान करता है। – Qwertie

1

आप बस सुरक्षित आंतरिक वर्ग संरक्षित सदस्य सोच सकते हैं, इसलिए यह केवल कक्षा, पैकेज, सबक्लास के लिए उपयोग है, लेकिन दुनिया के लिए नहीं।

इसके अलावा, बाहरी वर्ग के लिए, इसके लिए केवल दो एक्सेस संशोधक हैं। बस सार्वजनिक और पैकेज।

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