Java में एक्सेस
Gate.java में क्लास Gate लिखें जिसमें private int फ़ील्ड code हो, कंस्ट्रक्टर Gate(int n) जो code = n; सेट करे, और मेथड void show() जो code प्रिंट करे। Pier.java में एक gate बनाएँ Gate g = new Gate(9);, फिर बुलाएँ g.show();। दोनों फ़ाइलें कंपाइल करें और java Pier चलाएँ। स्क्रीन एक लाइन दिखाए: 9। फ़ील्ड Pier से छिपी है। Gate पर मेथड अभी भी उसे पढ़ सकती है। फ़ील्ड पर private लगाना — यही इस पेज का पाठ है।
वह फ़ील्ड जिसे Pier सीधे नाम न दे
अब तक उसी फ़ोल्डर की अन्य क्लासें अक्सर j.fill या t.size जैसी फ़ील्ड तक पहुँच सकती थीं जब उन पर कोई एक्सेस शब्द नहीं था। शब्द private इसे बदल देता है। private फ़ील्ड उसी क्लास की है जिसने उसे घोषित किया। उसी क्लास के अंदर की मेथड्स फ़ील्ड इस्तेमाल कर सकती हैं। दूसरी क्लास — यहाँ Pier — को g.code नहीं लिखना चाहिए।
पहले Gate.java बनाएँ। public class लाइन public class Gate है। यहाँ पुराना Tag या Jar क्लास नाम न छोड़ें। ब्रेसेस के अंदर private int code; घोषित करें। कंस्ट्रक्टर लिखें Gate(int n) { code = n; } अलग नामों के साथ ताकि इस पेज को this की ज़रूरत न पड़े। फिर लिखें:
void show() { System.out.println(code); }
Gate.java में main नहीं है। कंपाइल से पहले सेव करें। मेथड show उसी क्लास में बैठी है जहाँ code है, इसलिए वह private फ़ील्ड पढ़ सकती है। इस पेज पर यही अनुमत रास्ता है।
public class Gate {
private int code;
Gate(int n) {
code = n;
}
void show() {
System.out.println(code);
}
}
Pier बुलाता है show, न कि g.code
उसी फ़ोल्डर में Pier.java बनाएँ। इसकी public class लाइन public class Pier है। main के अंदर लिखें Gate g = new Gate(9); फिर g.show();। इस पेज पर System.out.println(g.code); न लिखें। अगर आप Pier से g.code पढ़ें जबकि code private है, javac मना करता है।
Pier को वही क्लास रखें जिसमें main है। इस पाठ के लिए main को Gate के अंदर न डालें। अगर static पेज का बचा Yard फ़ाइल अभी फ़ोल्डर में है, इस पाठ के लिए java Yard न चलाएँ — Gate.java और Pier.java कंपाइल करने के बाद java Pier चलाएँ।
public class Pier {
public static void main(String[] args) {
Gate g = new Gate(9);
g.show();
}
}
जिस फ़ोल्डर में दोनों फ़ाइलें हैं वहाँ से javac Gate.java Pier.java चलाएँ। दोनों पूरा होने पर आप पहले Gate.java और फिर Pier.java कंपाइल कर सकते हैं। जब कोष्ठक, ब्रेसेस और सेमीकोलन मिलते हैं तो javac अपनी कोई लाइन नहीं लिखता। फिर java Pier चलाएँ — java Pier.java नहीं, और java Gate भी नहीं। रन कमांड से .java अंत हटाएँ। वही क्लास शुरू करें जिसमें main है। वही कमांड Windows और macOS पर चलते हैं।
प्रोग्राम एक लाइन प्रिंट कर रुकना चाहिए: 9। आपसे टाइप नहीं माँगना चाहिए। अगर टर्मिनल कीबोर्ड इनपुट का इंतज़ार करे तो किसी पुराने अभ्यास की nextLine कॉल अभी किसी फ़ाइल में है। वह कॉल हटाएँ और Pier में new Gate(9) तथा g.show(); रखें, Gate में private int code के साथ।
रन को एक बार चलाकर देखें। Java Pier.main से शुरू होता है। व्यंजक new Gate(9) एक gate बनाता है और कंस्ट्रक्टर के अंदर code में 9 रखता है। कॉल g.show() उसी ऑब्जेक्ट पर show में जाती है। Gate के अंदर show code पढ़ सकती है और 9 प्रिंट करती है। Pier ने कभी फ़ील्ड का नाम नहीं लिया। स्क्रीन 9 दिखाती है।
अगर आप Pier में g.show(); की जगह System.out.println(g.code); लिखें, जब तक code private है javac एक्सेस त्रुटि से रुकता है। वही मना करना इस पेज का मतलब है। g.show(); वापस लगाएँ।
static और खुली फ़ील्ड से तुलना
static पेज पर आप बिना छिपी फ़ील्ड के Tag.ping(); बुलाते थे। वह अभी भी काम करता है। यह पेज फ़ील्ड छिपाता है और एक मेथड खुली छोड़ता है। बचा हुआ Tag.ping(); डेमो अलग पाठ है। इस पेज के लिए Gate और Pier तथा g.show(); रखें।
पिछले पेज अक्सर फ़ील्ड बिना private छोड़ते थे, इसलिए दूसरी क्लास से j.fill कंपाइल हो जाता था। वह ढीली शक्ल छोटे डेमो में अभी भी दिखती है। यह पाठ जान-बूझकर private चुनता है ताकि आप सीमा देख सकें। अकेले g को System.out.println(g); से प्रिंट करने पर साफ़ 9 नहीं दिखता। g.show(); बुलाएँ या क्लास की अनुमति वाली मेथड से प्रिंट करें।
दो gate, दो code
हर new Gate(...) अपना private code रखता है। आप लिख सकते हैं Gate a = new Gate(2); और Gate b = new Gate(8);, फिर बुलाएँ a.show(); और b.show();।
public class Pier {
public static void main(String[] args) {
Gate a = new Gate(2);
Gate b = new Gate(8);
a.show();
b.show();
}
}
फिर से कंपाइल और चलाएँ: javac Gate.java Pier.java, फिर java Pier। स्क्रीन एक लाइन पर 2 और अगली पर 8 दिखाए। हर show कॉल अपने ऑब्जेक्ट पर चली और उसी ऑब्जेक्ट की private फ़ील्ड पढ़ी। Gate b = a; लिखना दूसरा ऑब्जेक्ट नहीं बनाता — जब दो code चाहिए हों तो दो बार new Gate(...) करें।
अगर दोनों लाइनें एक ही संख्या दिखाएँ, जाँचें कि हर new अलग आर्ग्युमेंट पास करता है। अगर javac Pier के अंदर code की शिकायत करे, आपके पास अभी भी सीधी g.code लाइन है — उसे हटाएँ और show रखें।
packages के लिए क्या बचता है
यह पेज दोनों फ़ाइलें एक ही फ़ोल्डर में डिफ़ॉल्ट पैकेज लेआउट के साथ रखता है। बाद का पेज — packages — क्लासों को नामित फ़ोल्डरों में package लाइनों के साथ रखता है। यहाँ private और show पर रहें। इस पेज पर पूरा public/protected चार्ट न बनाएँ; पाठ का लक्ष्य एक private फ़ील्ड और एक मेथड है जो अभी भी उसे पढ़ सके।
अगर Pier.java कंपाइल करते समय javac को Gate न मिले, जाँचें कि Gate.java उसी फ़ोल्डर में है और क्लास लाइन public class Gate है। जब फ़ोल्डर में अभी Tag.java या Yard.java हों, उन्हें छोड़ दें या तभी हटाएँ जब वे आपकी कंपाइल कमांड उलझाएँ। इस पाठ की Gate और Pier जोड़ी कंपाइल करने के बाद java Pier चलाएँ।
packages से पहले
आप private int code; घोषित कर सकते हैं, Gate(int n) { code = n; } और void show() { System.out.println(code); } लिख सकते हैं, और Pier से चला सकते हैं Gate g = new Gate(9); फिर g.show();। दोनों फ़ाइलें कंपाइल करें और java Pier चलाएँ। स्क्रीन 9 दिखाती है। private फ़ील्ड Gate के अंदर रही। उसी क्लास की मेथड ने उसे प्रिंट किया। अगला पेज packages है, जहाँ आप क्लासों को नामित पैकेज फ़ोल्डरों में रखते हैं।
फ़ील्ड पर private रखें। प्रिंट को show के अंदर रखें, Pier से g.code के रूप में नहीं। main को Pier में रखें। ये तीन आदतें आगे बढ़ने से पहले इस पेज का चेकपॉइंट हैं। जब स्क्रीन show के ज़रिए 9 दिखाए, आपने एक्सेस सीमा उसी तरह पार कर ली है जैसा यह पाठ चाहता है।
🧠 अपने ज्ञान की परीक्षा करें
अपने ज्ञान की परीक्षा करें
इस इंटरैक्टिव क्विज़ के साथ अपनी चुनौती लें और देखें कि आप विषय को कितनी अच्छी तरह समझते हैं
📝 निर्देश
- हर प्रश्न को ध्यान से पढ़ें
- हर प्रश्न के लिए सबसे अच्छा उत्तर चुनें
- आप जितनी बार चाहें क्विज़ दोबारा दे सकते हैं
- आपकी प्रगति शीर्ष पर दिखाई जाएगी