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 कहते हैं। C++ में Class Visibility 4 Types की होती है -
किसी भी 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 किया जाता है।
File : B.java
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.
}
}
javac B.java java B 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 कर सकते हैं।
File : A.java
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();
}
}
javac A.java
java A
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 से कम।
File : A.java
// define package.
package packageA;
class A {
// define deault method
void myMethod() {
System.out.println("Default method in packageA");
}
}
File : B.java
// 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 नहीं आएगी।
File : A.java
package packageA;
public class A {
// define deault method
protected void myMethod() {
System.out.println("Default method in packageA");
}
}
File : B.java
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();
}
}
javac B.java
java B
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 कर सकते हैं।
File : A.java
// define package.
package packageA;
public class A {
// define deault method
public void myMethod() {
System.out.println("Default method in packageA");
}
}
File : B.java
// 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();
}
}
javac B.java
java B
Default method in packageA