Java Language
दृश्यता (एक वर्ग के सदस्यों तक पहुंच को नियंत्रित करना)
खोज…
वाक्य - विन्यास
- सार्वजनिक प्रकार का नाम [= value];
- निजी प्रकार का नाम [= value];
- संरक्षित प्रकार का नाम [= value];
- नाम टाइप करें [= value];
- सार्वजनिक वर्ग का नाम {
- कक्षा का नाम{
टिप्पणियों
एक्सेस स्तर संशोधक निर्धारित करते हैं कि क्या अन्य वर्ग किसी विशेष क्षेत्र का उपयोग कर सकते हैं या किसी विशेष विधि का उपयोग कर सकते हैं। अभिगम नियंत्रण के दो स्तर हैं:
- शीर्ष स्तर पर-
public
, या पैकेज-निजी (कोई स्पष्ट संशोधक) नहीं। - सदस्य स्तर पर-
public
,private
,protected
या पैकेज-प्राइवेट (कोई स्पष्ट संशोधक) नहीं।
एक वर्ग को संशोधक public
साथ घोषित किया जा सकता है, उस स्थिति में वह वर्ग सभी वर्गों के लिए हर जगह दिखाई देता है। यदि किसी वर्ग में कोई संशोधक नहीं है (डिफ़ॉल्ट, जिसे पैकेज-प्राइवेट के रूप में भी जाना जाता है), यह केवल अपने स्वयं के पैकेज के भीतर दिखाई देता है।
सदस्य स्तर पर, आप public
संशोधक या कोई संशोधक ( पैकेज-निजी ) का उपयोग केवल शीर्ष-स्तरीय कक्षाओं के साथ और उसी अर्थ के साथ भी कर सकते हैं। सदस्यों के लिए, दो अतिरिक्त एक्सेस संशोधक हैं: private
और protected
। private
संशोधक निर्दिष्ट करता है कि सदस्य को केवल अपनी ही कक्षा में पहुँचा जा सकता है। protected
संशोधक निर्दिष्ट करता है कि सदस्य को केवल अपने स्वयं के पैकेज ( पैकेज-निजी के साथ ) के भीतर और इसके अलावा, किसी अन्य पैकेज में अपनी कक्षा के एक उपवर्ग द्वारा पहुँचा जा सकता है।
निम्न तालिका प्रत्येक संशोधक द्वारा अनुमत सदस्यों की पहुंच को दर्शाती है।
पहुँच स्तर:
संशोधक | कक्षा | पैकेज | उपवर्ग | विश्व |
---|---|---|---|---|
public | Y | Y | Y | Y |
protected | Y | Y | Y | एन |
कोई संशोधक नहीं | Y | Y | एन | एन |
private | Y | एन | एन | एन |
इंटरफ़ेस सदस्य
public interface MyInterface {
public void foo();
int bar();
public String TEXT = "Hello";
int ANSWER = 42;
public class X {
}
class Y {
}
}
इंटरफ़ेस सदस्यों में हमेशा सार्वजनिक दृश्यता होती है, भले ही public
कीवर्ड को छोड़ दिया गया हो। तो दोनों foo()
, bar()
, TEXT
, ANSWER
, X
, और Y
में सार्वजनिक दृश्यता है। हालाँकि, एक्सेस अभी भी शामिल इंटरफ़ेस द्वारा सीमित किया जा सकता है - चूंकि MyInterface
की सार्वजनिक दृश्यता है, इसके सदस्यों को कहीं से भी एक्सेस किया जा सकता है, लेकिन यदि MyInterface
में पैकेज दृश्यता थी, तो इसके सदस्य केवल उसी पैकेज के भीतर से एक्सेस कर सकते हैं।
सार्वजनिक दृश्यता
वर्ग, पैकेज और उपवर्ग के लिए दृश्यमान है।
कक्षा टेस्ट के साथ एक उदाहरण देखते हैं।
public class Test{
public int number = 2;
public Test(){
}
}
अब कक्षा का एक उदाहरण बनाने की कोशिश करते हैं। इस उदाहरण में, हम number
तक पहुँच सकते हैं क्योंकि यह public
।
public class Other{
public static void main(String[] args){
Test t = new Test();
System.out.println(t.number);
}
}
निजी दृश्यता
private
दृश्यता एक वैरिएबल को केवल उसकी कक्षा तक पहुँचा जा सकता है। वे अक्सर public
गेटर्स और बसने वालों के साथ संयोजन में उपयोग किए जाते हैं।
class SomeClass {
private int variable;
public int getVariable() {
return variable;
}
public void setVariable(int variable) {
this.variable = variable;
}
}
public class SomeOtherClass {
public static void main(String[] args) {
SomeClass sc = new SomeClass();
// These statement won't compile because SomeClass#variable is private:
sc.variable = 7;
System.out.println(sc.variable);
// Instead, you should use the public getter and setter:
sc.setVariable(7);
System.out.println(sc.getVariable());
}
}
पैकेज दृश्यता
किसी भी संशोधक के साथ, डिफ़ॉल्ट पैकेज दृश्यता है। जावा डॉक्यूमेंटेशन से, "[पैकेज विजिबिलिटी] इंगित करता है कि क्या क्लास में समान क्लास में (उनके पेरेंटेज की परवाह किए बिना) सदस्य तक पहुंच है।" javax.swing
से इस उदाहरण में,
package javax.swing;
public abstract class JComponent extends Container … {
…
static boolean DEBUG_GRAPHICS_LOADED;
…
}
DebugGraphics
एक ही पैकेज में है, इसलिए DEBUG_GRAPHICS_LOADED
सुलभ है।
package javax.swing;
public class DebugGraphics extends Graphics {
…
static {
JComponent.DEBUG_GRAPHICS_LOADED = true;
}
…
}
यह लेख विषय पर कुछ पृष्ठभूमि देता है।
संरक्षित दृश्यता
संरक्षित दृश्यता कारणों का मतलब है कि यह सदस्य अपने पैकेज में दिखाई देता है, साथ ही इसके किसी भी उपवर्ग के साथ।
उदाहरण के तौर पे:
package com.stackexchange.docs;
public class MyClass{
protected int variable; //This is the variable that we are trying to access
public MyClass(){
variable = 2;
};
}
अब हम इस वर्ग का विस्तार करेंगे और इसके protected
सदस्यों में से एक का उपयोग करने का प्रयास करेंगे।
package some.other.pack;
import com.stackexchange.docs.MyClass;
public class SubClass extends MyClass{
public SubClass(){
super();
System.out.println(super.variable);
}
}
यदि आप एक ही पैकेज से इसे एक्सेस कर रहे हैं, तो आप इसे विस्तारित किए बिना किसी protected
सदस्य तक पहुँच प्राप्त कर सकते हैं।
ध्यान दें कि यह संशोधक केवल कक्षा के सदस्यों पर ही काम करता है, न कि केवल कक्षा पर।
कक्षा सदस्य एक्सेस संशोधक का सारांश
पहुँच संशोधक | दृश्यता | विरासत |
---|---|---|
निजी | केवल कक्षा | विरासत में नहीं मिल सकता है |
कोई संशोधक / पैकेज नहीं | पैकेज में | उपलब्ध है अगर पैकेज में उपवर्ग |
संरक्षित | पैकेज में | उपवर्ग में उपलब्ध है |
जनता | हर जगह | उपवर्ग में उपलब्ध है |
एक बार एक private protected
(एक बार में दोनों कीवर्ड) संशोधक थे जो पैकेज के बाहर एक उपवर्ग से उन्हें सुलभ बनाने के लिए विधियों या चर पर लागू हो सकते हैं, लेकिन उन्हें उस पैकेज में कक्षाओं के लिए निजी बनाते हैं। हालाँकि, इसे जावा 1.0 की रिलीज़ में हटा दिया गया था।