If tutorials available on this website are helpful for you, please whitelist this website in your ad blocker😭 or Donate to help us ❤️ pay for the web hosting to keep the website running.
पिछले topics में आपने देखा होगा कि Properties / Method को define करने से पहले public keyword का use किया गया था। वह Class Properties / Method का एक visibility / access mpdifier type ही था।
Class Visibility का मतलब Property / Method का scope define करना होता है। की वह Property / Method कहाँ - कहाँ Accessible होगा। class visibility को define करने वाले keywords को ही Access Specifiers कहते हैं।
Java में Class Visibility 4 Types की होती है -
default
private
protected
public
किसी भी class में किसी भी type के members (Static या Non Static Properties / Methods ) को define करने से पहले उस Properties / Method की visibility define करनी पड़ती है।
और अगर define नहीं करते हैं तो वह property / method automatically default
define हो जाती है।
●●●
private Property / Method सिर्फ और सिर्फ Class के अंदर ही accessible होंगे। Class के बाहर कहीं भी इन्हे access नहीं कर सकते हैं।
private
keyword का use करके किसी class के Properties / Methods को as a private define किया जाता है।
private class A {
// define private method.
private void privateMethod() {
System.out.println("This is private method");
}
}
public class B {
public static void main(String[] args) {
// try to access privateMethos.
A a = new A();
a.privateMethod(); // it generates error.
}
}
error: modifier private not allowed here private class A { ^ B.java:12: error: privateMethod() has private access in A a.privateMethod(); // it generates error. ^ 1 error
जैसा कि आप example में देख सकते हैं , कि A class के private method को class B
men access करने पर compiler ने error generate की है ।
जबकि same method को आप उसकी class में access कर सकते हैं।
public class A {
// define private method.
private void privateMethod() {
System.out.println("This is private method");
}
public static void main(String[] args) {
//now try to access privateMethos.
A a = new A();
a.privateMethod();
}
}
This is private method
आप किसी class का constructor भी private define कर सकते हैं , लेकिन ध्यान रहे फिर उस class का object आप class के बाहर नहीं create कर पाएंगे, और न ही class को inherit कर सकते हैं।
●●●
अगर आप class में modifiers define नहीं करते हैं तो वह property / method as a default
treat की जाती है। default modifiers सिर्फ same package में access किया जा सकता है।
किसी दूसरे package में default modifiers को access नहीं कर सकते हैं। यह private से थोड़ी ज्यादा accessibility provide कराता है लेकिन protected, और public से कम।
// define package.
package packageA;
class A {
// define deault method
void myMethod() {
System.out.println("Default method in packageA");
}
}
// now define another package.
package packageB;
// import all classes from packageA to use inside current package.
import packageA.*;
public class B {
public static void main(String args[]) {
A a = new A();//Compile Time Error
a.myMethod();//Compile Time Error
}
}
यहां हमें error
मिलेगी क्योंकि , class और उसके method default हैं और उन्हें हम किसी दुसरे package access कर रहें हैं।
Java में package similar types के classes, interfaces and sub-packages का collection होते हैं। जिससे code को उसके logic के according categorize कर सकें और maintain और manage करना easy हो जाए। इसे आप PHP में Namespaces और C , C++ में libraries जैसे समझ सकते हैं। हालाँकि package के बारे में आप बाद में पढ़ेंगे।
●●●
protected
access modifiers , same package में accessible तो होगा ही साथ ही इसे Inheritance
के through किसी दूसरे package में भी access कर सकते हैं। इसके लिए protected keyword की ही use किया जाता है।
Inheritance को आप आगे detail में पढ़ेंगे।
protected
access modifiers को आप class के data member, method और constructor पर apply कर सकते हैं , class पर नहीं। मतलब किसी class को आप protected declare नहीं कर सकते हैं।
Example के लिए ऊपर दिए गए example को अगर protected method और Inheritance के through करें तो कोई error नहीं आएगी।
package packageA;
public class A {
// define deault method
protected void myMethod() {
System.out.println("Default method in packageA");
}
}
package packageB;
import packageA.*;
// extend class A from packaeA
public class B extends A {
public static void main(String args[]) {
B b = new B();
b.myMethod();
}
}
Default method in packageA
●●●
public
access modifiers , हर जगह accessible है , मतलब कोई भी class या Class में public keyword का use करके define किये गए Property / Method को कहीं से भी access कर सकते हैं।
Class के अंदर , बाहर , इसके Child class में या same package और different package में भी access कर सकते हैं।
// define package.
package packageA;
public class A {
// define deault method
public void myMethod() {
System.out.println("Default method in packageA");
}
}
// now define another package.
package packageB;
// import all classes from packageA to use inside current package.
import packageA.*;
public class B {
public static void main(String args[]) {
A a = new A();
a.myMethod();
}
}
Output
Default method in packageA