2012-09-13 9 views
5

में एक्सेस विनिर्देशों के बारे में भ्रम मैं जावा और सी # में एक्सेस संशोधक की तुलना कर रहा था। मैं जावा में सी # के protected internal का विकल्प खोजना चाहता था। लेकिन मैंने देखा कि protected संशोधक दोनों भाषाओं में भिन्न है (C# और Java)। जावा में protected सी # के protected internal के बराबर है क्योंकि सदस्य भी उसी पैकेज में पहुंच योग्य हो जाता है।जावा और सी #

मैं दो प्रश्न

  • क्यों वे में जावा और सी # एक ही संशोधक के लिए अलग-अलग अर्थ बनाया है?
  • सी # (का protected कैसे हो सकता है जिसमें जावा में युक्त कक्षा से प्राप्त श्रेणी या प्रकार तक सीमित है।) जावा में?

उत्तर

2

क्यों वे जावा में एक ही संशोधक और सी # करने के लिए अलग अलग अर्थ बनाया है?

सादगी और अलग-अलग पहुंच अधिकारों को सटीक रूप से निर्दिष्ट करने की क्षमता के बीच एक विकल्प बनाना था। जावा के रचनाकारों द्वारा (और बाद में) सी # के रचनाकारों द्वारा विभिन्न विकल्प किए गए थे।

मैं सी # की रक्षा कैसे कर सकता हूं (एक्सेस कक्षा या युक्त कक्षा से व्युत्पन्न प्रकारों तक सीमित है।) जावा में?

आप नहीं कर सकते। जावा इस बिंदु पर अधिक सीमित है।

लेकिन आपको शायद protected कीवर्ड के उपयोग को सीमित करना चाहिए क्योंकि दोनों उपयोगों में इसका मतलब सामान्य encapsulation सिद्धांत को तोड़ना है। यह उपयोग कभी-कभी उपयोगी होता है, क्योंकि बहुत सख्त भाषा का अर्थ बहुत बेकार कोड हो सकता है, लेकिन ऐसा कुछ भी न करें जो बहुत बंधे और बदलना और बनाए रखना मुश्किल हो। कक्षाओं को ओवरराइड करने के लिए आंतरिक क्षेत्रों या विधियों तक पहुंच देना अक्सर इसका मतलब है कि आपके पास बहुत अधिक कार्यान्वयन युग्मन (रखरखाव के लिए पदानुक्रम पर संरचना पसंद करते हैं) के साथ भारी पदानुक्रम है।

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

Here's the complete grid:

enter image description here

+0

"कुछ ऐसा करने के लिए सावधान रहें जो बहुत बंधे और बदलना और बनाए रखना मुश्किल हो"। मेरी समझ में नहीं आया। इसमें संशोधक कैसे भूमिका निभाता है? – Shashwat

+0

जब आपके पास एक आंतरिक क्षेत्र तक पहुंचने वाले उप-वर्ग हैं, तो आपके पास सुपरक्लस के कार्यान्वयन को बदलने के लिए एक मजबूत युग्मन है। यह उन समस्याओं में से एक है जो encapsulation से बचने में मदद करता है। –

+0

समझ गया। धन्यवाद :) – Shashwat

0

जावा API दस्तावेज़ में, कीवर्ड पहुँच विनिर्देशक Sun.com द्वारा प्रदान नहीं की है। इस उदाहरण को आजमाएं

D:\>javac Demo.java 
Demo.java:1: error: **modifier** private not allowed here 
private class Test 
     ^
1 error 
संबंधित मुद्दे