क्या "पैकेज निजी" सदस्य अभिगम डिफ़ॉल्ट (नहीं-संशोधक) के साथ समान है?


94

मैं "पैकेज प्राइवेट" शब्द के बारे में थोड़ा भ्रमित हूं, जो कुछ प्रलेखन का उपयोग करता है, साथ ही "डिफ़ॉल्ट एक्सेस" का उपयोग करता है। संरक्षित के साथ पर्यायवाची पैकेज-निजी और डिफ़ॉल्ट पहुँच दोनों नहीं हैं?


7
तो, पैकेज निजी पहुंच को व्यक्त करने के लिए कोई कीवर्ड नहीं है? यह केवल पहुँच संशोधक को निर्दिष्ट नहीं करके निहित है?
टर्टलटॉज

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

जवाबों:


136

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


यहाँ बहुत सारे अच्छे उत्तर थे, लेकिन इसने इसे सरल और बिंदु तक समझाया, इसलिए मैं इसे स्वीकार कर रहा हूँ
टर्टलटॉज़

23
इसके लायक यह देखते हुए कि इंटरफेस सदस्य के लिए डिफ़ॉल्ट पहुँच है नहीं पैकेज-निजी।
पीटर लॉरी

1
@PeterLawrey ओह? इंटरफ़ेस सदस्यों के लिए डिफ़ॉल्ट पहुँच क्या है?
ArtOfWarfare

8
किसी फ़ील्ड के लिए डिफ़ॉल्ट public static final, एक विधि के लिए public abstract, एक publicpublic static
एनुम

36

"डिफ़ॉल्ट" एक्सेस संशोधक (उनमें से कोई भी जहां स्पष्ट रूप से नहीं दिया गया है) "पैकेज-निजी" है, जिसका अर्थ है कि केवल एक ही पैकेज में चीजें उन्हें एक्सेस कर सकती हैं। हालाँकि, एक ही पैकेज में होने का तात्पर्य कक्षाओं के बीच विरासत के संबंध के बारे में कुछ भी नहीं है - यह विशुद्ध रूप से एक नामकरण सम्मेलन है।

"संरक्षित" का अर्थ है कि न केवल एक ही पैकेज में कक्षाएं, बल्कि उप-वर्ग (चाहे जो भी उपवर्ग हैं जो उप-वर्ग में हैं) इसे एक्सेस कर पाएंगे।


अच्छी तरह से संरक्षित के बारे में आपका शब्द गलत है .. एक ही पैकेज वर्ग के उदाहरण भी संरक्षित सदस्यों तक पहुंच सकते हैं ..
गुरसेल कोक

15

कक्षाओं के लिए डिफ़ॉल्ट पहुँच पैकेज-निजी है, हालाँकि इंटरफ़ेस सदस्यों के लिए डिफ़ॉल्ट पहुँच सार्वजनिक है।

जैसे

public interface I {
   int A = 1;
// same as
   public static final int A = 1;

   void method();
// same as
   public abstract void method();

   class C { }
// same as
   public static class C { }
}

इंटरफेस के लिए डिफ़ॉल्ट एक्सेस नियम कक्षाओं के लिए समान नहीं हैं।


3

पैकेज-प्राइवेट और डिफॉल्ट एक्सेस पर्यायवाची हैं। ऑब्जेक्ट ऑब्जेक्ट के संरक्षित सदस्य तक भी पहुंच सकता है जिसकी कक्षाएं एक ही पैकेज में हैं। एक वस्तु भी अपने पैकेज के बारे में एक शर्त के बिना अपने सुपरक्लास के संरक्षित सदस्य तक पहुंच सकती है। एक ठोस उदाहरण के रूप में:

package ab;

class A {
   protected void foo() {}
   void dd(){}
}

class C {
   void aa(){
       A a = new A();
       a.foo(); //legal
       a.dd();  //legal
   }
}


package sub;

class D extends A{
      void ac(){
         foo(); //legal ..
         dd();  //illegal.. because dd has default access.. 
      }

class E {
    void ee(){
       A a = new A();
       a.foo(); //illegal
       a.dd();  //illegal     
    }

downvoter समझा सकता है कि इस स्पष्टीकरण का क्या गलत है? .. खराब शब्दों को छोड़कर ..
गुरसेल कोक

6
मैं नीच नहीं हूँ, लेकिन मुझे लगता है कि यह काफी सही नहीं है; एक वस्तु पैकेज की परवाह किए बिना सुपरक्लास के संरक्षित सदस्यों तक पहुंच सकती है ।
एड्रियन पेट्रसेकू

1

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

उनमें से कोई भी 'संरक्षित' के समान नहीं है, जो अन्य संकुल में व्युत्पन्न वर्गों तक फैली हुई है।


0

से जावा भाषा युक्ति

  • 6.6.5 उदाहरण: डिफ़ॉल्ट एक्सेस फील्ड्स, तरीके, और कंस्ट्रक्टर्स पहुँच संशोधक सार्वजनिक में से कोई भी, सुरक्षित, या निजी निर्दिष्ट रहे हैं, तो एक वर्ग के सदस्य या निर्माता पैकेज उस वर्ग के घोषणा-पत्र शामिल भर पहुँचा जा सकता है कौन सी क्लास में सदस्य घोषित किया जाता है, लेकिन वर्ग सदस्य या कंस्ट्रक्टर किसी अन्य पैकेज में सुलभ नहीं है।

यदि किसी सार्वजनिक वर्ग के पास डिफ़ॉल्ट एक्सेस के साथ एक विधि या कंस्ट्रक्टर है, तो यह विधि या कंस्ट्रक्टर इस पैकेज के बाहर घोषित उपवर्ग द्वारा पहुंच या विरासत में नहीं मिल सकता है


2
लेकिन "पैकेज प्राइवेट" के बारे में क्या। यह JLS में नहीं है।
टॉम हॉकिन -

-1

डिफ़ॉल्ट और पैकेज-निजी दोनों समान हैं, जिसका अर्थ है कि किसी भी वर्ग द्वारा दोनों का उपयोग तब तक किया जा सकता है जब तक वे एक ही पैकेज में न हों।

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

इसलिए पैकेज-निजी का मतलब डिफ़ॉल्ट के समान है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.