Access Specifiers in Java: Access Control का प्रयोग करके हम ये तय कर सकते हैं कि Program का कौनसा भाग किसी Class के Members को Access कर सकता है। Access Controls का प्रयोग करके हम Class के Members को गलत तरीके से Use करने से रोक सकते हैं।
उदाहरण के लिए यदि हम Class के Data को किसी Well Defined Method द्वारा ही Access करने के लिए Control करना चाहें, तो इसके लिए हम Access Controls का प्रयोग कर सकते हैं। जिससे किसी भी अन्य तरीके से Class के Data को Access नहीं किया जा सके।
ऐसे में हम Class के Data को यदि Access करना चाहें तो हम Class मे उस Data को Access करने वाला Method Define कर देते हैं। ऐसा करने पर हम केवल उस Method द्वारा ही Class के Data को Access कर सकते हैं। Class के Data को Access करने का कोई और दूसरा तरीका नहीं होता है। यदि हमें Class के किसी Data को Access करना है, तो हमें उस Class के उसी Method को Use करना होगा, जो उस Data को Access कर सकता है।
Encapsulation का मुख्य उद्देश्य यही है कि हम Class के Data को उसी Class के किसी Member द्वारा ही Access करने में सक्षम हों। ऐसा होने पर Class के Data सुरिक्षत रहते हैं और किसी भी अन्य तरीके से Class के Data को modify नहीं किया जा सकता है। अभी तक हमने जितनी भी Classes बनाई हैं, उन सभी Classes के Data को किसी भी Method में Directly Access किया जा सकता है। इसलिए इन Classes को हम ऐसी Class नहीं कह सकते हैं जो Encapsulation के नियम को Follow करते हों।
किसी Class के Members को किस प्रकार से Access किया जा सकता है ये तय करने के लिए हम Access Specifier का प्रयोग करते हैं। जावा में Access Specifier का एक समूह है, जो ये तय करते हैं कि किस स्थिति में किसी Member को किस हद तक Access किया जा सकता है। इनमें से कुछ Access Specifier मुख्यतया Inheritance व Packages के लिए ही Use होते हैं। किसी एक विष; से सम्बंधित सभी Classes के एक समूह को Package कहा जाता है। Package से सम्बंधित Access Specifier के बारे में हम आगे विस्तार से चर्चा करेंगे। यहां हम केवल एक Single Class से सम्बंधित Access Specifier के बारे में सीखेंगे।
जावा के मुख्य Access Specifier public, protected व private हैं। साथ ही जावा का एक Default Access Specifier भी है। protected Specifier केवल तब Apply होता है, जब Inheritance का प्रयोग किया जाता है।
public and private Access Specifiers in Java
जब किसी Class के Members public होते हैं, तब Class के उन Members को किसी भी अन्य Method द्वारा Directly Access करके Modify किया जा सकता है। लेकिन जब किसी Class के Members private होते हैं, तब Class के उन Members को केवल उसी Class में Define किए गए public Methods द्वारा ही Access किया जा सकता है। main() Method को हम इसीलिए हमेंशा public रखते हैं, ताकि main() Method की Class के विभिन्न Data को आसानी से main() Method व किसी भी अन्य Method द्वारा Access किया जा सके। जब किसी Class किन्हीं Member के साथ किसी Access Specifier का प्रयोग नहीं किया जाता है, तब Class के वे Members Default रूप से public होते हैं।
जैसाकि हमने Box Class में किसी भी Data Member के साथ किसी Access Specifier का प्रयोग नहीं किया है, इसलिए ये सभी Data Members Default रूप से public हैं। एक बात ध्यान रखने वाली ये है कि जब हम किसी Class के Members के साथ किसी Access Specifier का प्रयोग नहीं करते हैं, तब उस Class के Members को हम केवल उसी Package में Directly Access कर सकते हैं।
Default Access Control की Range केवल उसी Package तक होती है। यदि हमें किसी एक Package के Class के Members को किसी दूसरे Package के Members में Use करना है, तो हमे पहले Package के Members को public Access Specifier के साथ ही Declare करना जरूरी होता है।
अभी तक हमने जो भी Class Develop की है, उसमें सभी Data Members Default रूप से public हैं। उदाहरण के लिए Box Class के सभी Members public हैं, इसीलिए हम main() Method से भी Box Class के Data को मान प्रदान कर सकते हैं और Box Class के Data के मानों को Screen पर Print कर सकते हैं। जबकि वास्तव में ऐसा नहीं होना चाहिए।
यदि हम Default Access Specifier का प्रयोग करते हैं, तो Program के किसी भी Method द्वारा Box Class के Object के Data को Modify किया जा सकता है, जो कि नहीं होना चाहिए। क्योंकि किसी भी Practical Application में सबसे जरूरी चीज Data की Security ही होती है। इसलिए हमें हमेंशा अपनी Class के Data को किसी भी अन्य Method द्वारा Modify होने से रोकना होता है। ये काम हम तब कर सकते हैं जब Class के Data Members private हों।
किसी Class के Object Program के अन्य हिस्सों से तभी Communicate कर सकते हैं, जब उस Class का कोई Member public होता है। Data की सुरक्षा के कारण हम Data को तो public नहीं कर सकते हैं, लेकिन Class के Methods को हम public रखते हैं। Class के Methods ही Program के अन्य हिस्सों में Class के Data को Access करने का एक मात्र माध्यम हो सकते हैं, क्योंकि वे public होते हैं। चलिए, इस प्रक्रिया को एक Program द्वारा समझते हैं जिसमें हमने फिर से Box Class का ही उदाहरण लिया है।
चूंकि हम चाहते हैं कि Box Class के Data को किसी भी अन्य Method द्वारा Directly Access ना किया जा सके, इसलिए हमें Box Class के Data को private करना होगा। ये काम हम निम्नानुसार कर सकते हैं:
class Box { private double width; private double height; private double length; }
अब इस Class को Access करने के लिए हम निम्नानुसार एक Program बना सकते हैं-
class Box { //Attributes private double width; private double height; private double length; //Methods public void volume() { double volume; volume = length * height * width; System.out.println("Volume is " + volume); } } public class BoxVolume { public static void main(String args[]) { Box cpuCabinet = new Box(); Box hardDisk = new Box(); cpuCabinet.length = 100; cpuCabinet.height = 70; cpuCabinet.width = 20; hardDisk.length = 10; hardDisk.height = 1.5; hardDisk.width = 6; cpuCabinet.volume(); hardDisk.volume(); } }
यदि इस Program को हम Compile करते हैं, तो हमें निम्नानुसार Errors प्राप्त होते हैं:
PrivateDataMember.java:25: length has private access in Box cpuCabinet.length = 100; ^ PrivateDataMember.java:26: height has private access in Box cpuCabinet.height = 70; ^ PrivateDataMember.java:27: width has private access in Box cpuCabinet.width = 20; ^ PrivateDataMember.java:29: length has private access in Box hardDisk.length = 10; ^ PrivateDataMember.java:30: height has private access in Box hardDisk.height = 1.5; ^ PrivateDataMember.java:31: width has private access in Box hardDisk.width = 6; ^ 6 errors
ये Errors इसलिए Generate होते हैं, क्योंकि Box Class के Data Members को private Declare किया गया है और किसी Class के Private Data Members को उसी Class का कोई public Method ही Access कर सकता है।
चूंकि हमें Box Class के Objects को Initialize करना है तो या तो हम इस काम के लिए Constructors का प्रयोग कर सकते हैं, क्योंकि Constructors उसी Class के वे Methods होते हैं, जो Object Creation के साथ ही Automatically Execute हो जाते हैं, या फिर हम Box Class में निम्नानुसार एक public Method Define करके Box Object को Initialize कर सकते हैं:
public void initializeObject(double len, double wid, double hei) { length = len; width = wid; height = hei; }
इस Method को अपनी Box Class में निम्नानुसार Include करके हम main() Method में Box Class के Object के Data को Box Class के Outside के main() Method में Access कर सकते हैं:
// Program class Box { //Attributes private double width; private double height; private double length; //Methods public void volume() { double volume; volume = length * height * width; System.out.println("Volume is " + volume); } public void initializeObject(double len, double wid, double hei) { length = len; width = wid; height = hei; } } public class PrivateDataPublicMethod { public static void main(String args[]) { Box cpuCabinet = new Box(); Box hardDisk = new Box(); cpuCabinet.initializeObject(100, 70, 20); hardDisk.initializeObject(10, 1.5, 6); cpuCabinet.volume(); hardDisk.volume(); } } // Output Volume is 140000.0 Volume is 90.0
ये Program Compile भी होता है और Execute हो कर Result भी प्रदान करता है। किसी Class के Private Members को उस Class से बाहर किसी दूसरी Class में Use करने के लिए हमें हमेंशा इसी तरीके को Use करना पडता है। जिस तरह से हम public व private Data Members Create कर सकते हैं, उसी तरह से हम किसी Class में private Methods भी Create कर सकते हैं।
लेकिन ऐसा करने पर यदि हम उस private Method को Class से Outside में Use करना चाहें, तो भी हमें उसी Class के एक public Method की जरूरत होती है। सारांश ये है कि किसी Class के private Members को उस Class से बाहर किसी अन्य Class में तभी Use किया जा सकता है, जब उसी Class में किसी public Method में private Members को Access करने के Code लिखे गए हों। किसी Class के private Members को Class से बाहर Access करने का कोई और दूसरा तरीका नहीं है।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Java in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
Java Programming Language in Hindi | Page: 682 | Format: PDF