Access Modifiers in Java
As the name suggests access modifiers in Java helps to restrict the scope of a class, constructor , variable , method or data member. There are four types of access modifiers available in java:
- Default – No keyword required
- Private
- Protected
- Public

-
Default: When no access modifier is specified for a class , method or data member – It is said to be having the default access modifier by default.
- The data members, class or methods which are not declared using any access modifiers i.e. having default access modifier are accessible only within the same package.
In this example, we will create two packages and the classes in the packages will be having the default access modifiers and we will try to access a class from one package from a class of second package.
//Java program to illustrate default modifierpackagep1;//Class Geeks is having Default access modifierclassGeek{voiddisplay(){System.out.println("Hello World!");}}chevron_rightfilter_none//Java program to illustrate error while//using class from different package with//default modifierpackagep2;importp1.*;//This class is having default access modifierclassGeekNew{publicstaticvoidmain(String args[]){//accessing class Geek from package p1Geeks obj =newGeek();obj.display();}}chevron_rightfilter_noneOutput:
Compile time error
-
Private: The private access modifier is specified using the keyword private.
- The methods or data members declared as private are accessible only within the class in which they are declared.
- Any other class of same package will not be able to access these members.
- Top level Classes or interface can not be declared as private because
- private means “only visible within the enclosing class”.
- protected means “only visible within the enclosing class and any subclasses”
Hence these modifiers in terms of application to classes, they apply only to nested classes and not on top level classes
In this example, we will create two classes A and B within same package p1. We will declare a method in class A as private and try to access this method from class B and see the result.
//Java program to illustrate error while//using class from different package with//private modifierpackagep1;classA{privatevoiddisplay(){System.out.println("GeeksforGeeks");}}classB{publicstaticvoidmain(String args[]){A obj =newA();//trying to access private method of another classobj.display();}}chevron_rightfilter_noneOutput:
error: display() has private access in A obj.display(); -
protected: The protected access modifier is specified using the keyword protected.
- The methods or data members declared as protected are accessible within same package or sub classes in different package.
In this example, we will create two packages p1 and p2. Class A in p1 is made public, to access it in p2. The method display in class A is protected and class B is inherited from class A and this protected method is then accessed by creating an object of class B.
//Java program to illustrate//protected modifierpackagep1;//Class ApublicclassA{protectedvoiddisplay(){System.out.println("GeeksforGeeks");}}chevron_rightfilter_none//Java program to illustrate//protected modifierpackagep2;importp1.*;//importing all classes in package p1//Class B is subclass of AclassBextendsA{publicstaticvoidmain(String args[]){B obj =newB();obj.display();}}chevron_rightfilter_noneOutput:
GeeksforGeeks
-
public: The public access modifier is specified using the keyword public.
- The public access modifier has the widest scope among all other access modifiers.
- Classes, methods or data members which are declared as public are accessible from every where in the program. There is no restriction on the scope of a public data members.
//Java program to illustrate//public modifierpackagep1;publicclassA{publicvoiddisplay(){System.out.println("GeeksforGeeks");}}packagep2;importp1.*;classB{publicstaticvoidmain(String args[]){A obj =newA;obj.display();}}chevron_rightfilter_noneOutput:
GeeksforGeeks
- If other programmers use your class, try to use the most restrictive access level that makes sense for a particular member. Use private unless you have a good reason not to.
- Avoid public fields except for constants.
- Access and Non Access Modifiers in Java
- Access Modifiers in C++
- Access specifiers for classes or interfaces in Java
- Java | CDMA (Code Division Multiple Access)
- More restrictive access to a derived class method in Java
- Access specifier of methods in interfaces
- Method Overriding with Access Modifier
- Java.util.LinkedList.poll(), pollFirst(), pollLast() with examples in Java
- Java.util.function.LongPredicate interface in Java with Examples
- Java.util.BitSet class methods in Java with Examples | Set 2
- Java.lang.Short toString() method in Java with Examples
- Java.util.function.IntPredicate interface in Java with Examples
- Java lang.Long.lowestOneBit() method in Java with Examples
- Java.util.function.DoublePredicate interface in Java with Examples
- Java.util.function.BiPredicate interface in Java with Examples
Important Points:
This article is contributed by Harsh Agarwal. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Recommended Posts:
Improved By : ankitmahla



