(Translated by https://www.hiragana.jp/)
Public vs Protected vs Package vs Private Access Modifier in Java - GeeksforGeeks
Open In App

Public vs Protected vs Package vs Private Access Modifier in Java

Last Updated : 06 Sep, 2023
Summarize
Comments
Improve
Suggest changes
Like Article
Like
Save
Share
Report
News Follow

Whenever we are writing our classes we have to provide some information about our classes to the JVM like whether this class can be accessible from anywhere or not, whether child class creation is possible or not, whether object creation is possible or not etc. we can specify this information by using an appropriate keyword in java called access modifiers. So access modifiers are used to set the accessibility of classes, methods, and other members.

Modifier 1: Public Access Modifiers

If a class is declared as public then we can access that class from anywhere.

In the below example we are creating a package pack1 inside that package we declare a class A which is public and inside that class, we declare a method m1 which is also public. Now we create another package pack2 and inside that pack2 we import pack1 and declare a class B and in class B’s main method we create an object of type class A and trying to access the data of method m1.

Example:

Java




// Java program to showcase the example
// of public access modifier
 
// creating a package
package pack1;
   
// import required packages
import java.io.*;
import java.util.*;
   
// declaring a public class
public class A {
     
    // declaring method m1
    public void m1() { System.out.println("GFG"); }
}


 
Compiling and saving the above code by using the below command line:

Java




// creating a package
package pack2;
   
// import required packages
import java.io.*;
import java.util.*;
   
// importing package pack1
import pack1.A;
   
// driver class
class B {
     
    // main method
    public static void main(String[] args)
    {
        // creating an object of type class A
        A a = new A();
         
        // accessing the method m1()
        a.m1();
    }
}


 If class A is not public while compiling B class we will get a compile-time error saying pack1. A is not public in pack1 and can’t be accessed from the outside package.

Similarly, a member or method, or interface is declared as public as we can access that member from anywhere.

Modifier 2: Protected Access Modifier

This modifier can be applied to the data member, method, and constructor, but this modifier can’t be applied to the top-level classes and interface.

A member is declared as protected as we can access that member within the current package and only in the child class of the outside package.

Implementation:

Example 

Java




// Java program to showcase the example
// of protected access modifier
// import required packages
import java.io.*;
import java.util.*;
   
// declaring a parent class A
class A {
     
    // declaring a protected method m1()
    protected void m1() { System.out.println("GFG"); }
}
   
// creating a child class by extending the class A
class B extends A {
     
    // main method
    public static void main(String[] args)
    {
        // creating an object of parent class
        // using parent reference
        A a = new A();
         
        /// calling method m1
        a.m1();
         
        // creating an object of child class
        // using child reference
        B b = new B();
         
        // calling method m1
        b.m1();
         
        // creating an object of child class
        // using parent reference
        A a1 = new B();
         
        // calling m1 method
        a1.m1();
    }
}


Output

GFG
GFG
GFG

Output explanation:

In the above example, we create three objects using parent reference and child reference and call m1() method on it, and it successfully executed so from the above example we can say that we can access the protected method within the current package anywhere either by using parent reference or by child reference. We can access protected method outside the package only by child reference.

Modifier 3: Private Access Modifiers

This modifier is not applicable for top-level classes or interfaces. It is only applicable to constructors, methods, and fields inside the classes.  

If a variable or methods or constructor is declared as private then we can access them only from within the class i.e from outside the class we can’t access them.

Example:

Java




// Java program to showcase the example
// of private access modifier
   
// import required packages
import java.io.*;
   
import java.util.*;
   
// helper class
class A {
     
    // helper method
    private void m1() { System.out.println("GFG"); }
}
   
// driver class
class B {
     
    // main method
    public static void main(String[] args)
    {
        // creating an object of type class A
        A a = new A();
         
        // accessing the method m1()
        a.m1();
    }
}


Modifier 4: Package(Default) Access Modifier  

A class or method or variable declare without any access modifier then is considered that it has a package(default)access modifier The default modifier act as public within the same package and acts as private outside the package. If a class is declared as default then we can access that class only within the current package i.e from the outside package we can’t access it. Hence, the default access modifier is also known as the package–level access modifier. A similar rule also applies for variables and methods in java.

Example: 

Java




// Java Program to illustrate Package Level Access Modifier
   
// Importing utility classes
// Importing input output classes
import java.io.*;
import java.util.*;
   
// Main Class
class GFG {
   
    // Declaring default variables that is
    // having no access modifier
    String s = "Geeksfor";
    String s1 = "Geeks";
   
    // Method 1
    // To declare a default method
    String fullName()
    {
   
        // Concatenation of strings
        return s + s1;
    }
   
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
   
        // Creating an object of main class(GFG)
        // in the main() method
        GFG g = new GFG();
   
        // Calling method1 using class instance
        // and printing the concatenation of strings
        System.out.println(g.fullName());
    }
}


Output

GeeksforGeeks

Finally, after getting it done with all four access modifiers let us conclude the evident differences between them 

Public Access Modifier Private Access Modifier        Protected access modifier  Package access modifier
This modifier is applicable for both top-level classes and interfaces. This modifier is not applicable for both top-level classes and interfaces. This modifier is not applicable for both top-level classes and interfaces. This modifier is applicable for both top-level classes and interfaces.
Public members can be accessed from the child class of the same package. Private members cannot be accessed from the child class of the same package. Protected members can be accessed anywhere from the same package and only by child classes outside the package. Package members can be accessed from the child class of the same package.
Public member can be accessed from non-child classes of the same package. Private members cannot be accessed from non-child classes of the same package. Protected member can be accessed from non-child classes of the same package. Package member can be accessed from non-child class of the same package.
Public members can be accessed from the child class of outside package. Private members cannot be accessed from the child class of outside package. Protected members can be accessed from the child class of the outside package, but we should use child reference only.  Package members cannot be accessed from the child class of outside package.
Public members can be accessed from non-child class of outside package. Private members cannot be accessed from non-child class of outside package. Protected members cannot be accessed from the non-child class of outside package. Package members cannot be accessed from non-child class of outside package.
Public modifier is the most accessible modifier among all modifiers. Private modifier is the most restricted modifier among all modifiers. Protected modifier is more accessible than the package and private modifier but less accessible than public modifier. Package modifier is more restricted than the public and protected modifier but less restricted than the private modifier.

 



Previous Article
Next Article

Similar Reads

Public vs Protected Access Modifier in Java
Whenever we are writing our classes, we have to provide some information about our classes to the JVM like whether this class can be accessed from anywhere or not, whether child class creation is possible or not, whether object creation is possible or not, etc. we can specify this information by using an appropriate keyword in java called access mo
4 min read
Private vs Protected vs Final Access Modifier in Java
Whenever we are writing our classes, we have to provide some information about our classes to the JVM like whether this class can be accessed from anywhere or not, whether child class creation is possible or not, whether object creation is possible or not, etc. we can specify this information by using an appropriate keyword in java called access mo
5 min read
Protected vs Final Access Modifier in Java
Whenever we are writing our classes, we have to provide some information about our classes to the JVM like whether this class can be accessed from anywhere or not, whether child class creation is possible or not, whether object creation is possible or not, etc. we can specify this information by using an appropriate keyword in java called access mo
5 min read
Abstract vs Public Access Modifier in Java
Access Modifier in Java is the reserved keyword used to define the scope of a class, variable, and methods. It also tells us about that whether child class creation is possible or not or whether object creation is possible or not. Abstract Access Modifier is a modifier applicable only for classes and methods but not for variables. If we declare any
4 min read
Private vs Final Access Modifier in Java
Whenever we are writing our classes we have to provide some information about our classes to the JVM like whether this class can be accessed from anywhere or not, whether child class creation is possible or not, whether object creation is possible or not etc. we can specify this information by using an appropriate keyword in java called access modi
3 min read
Protected vs Private Access Modifiers in Java
Access modifiers are those elements in code that determine the scope for that variable. As we know there are three access modifiers available namely public, protected, and private. Let us see the differences between Protected and Private access modifiers. Access Modifier 1: Protected The methods or variables declared as protected are accessible wit
2 min read
Protected vs Package Access Modifiers in Java
Whenever we are writing our classes, we have to provide some information about our classes to the JVM like whether this class can be accessed from anywhere or not, whether child class creation is possible or not, whether object creation is possible or not, etc. we can specify this information by using an appropriate keyword in java called access mo
4 min read
Public vs Private Access Modifiers in Java
Whenever we are writing our classes we have to provide some information about our classes to the JVM like whether this class can be accessible from anywhere or not, whether child class creation is possible or not, whether object creation is possible or not etc. we can specify this information by using an appropriate keyword in java called access mo
3 min read
Public vs Package Access Modifiers in Java
Whenever we are writing our classes, we have to provide some information about our classes to the JVM like whether this class can be accessed from anywhere or not, whether child class creation is possible or not, whether object creation is possible or not, etc. we can specify this information by using an appropriate keyword in java called access mo
4 min read
Package vs Private Access Modifiers in Java
Whenever we are writing our classes, we have to provide some information about our classes to the JVM like whether this class can be accessed from anywhere or not, whether child class creation is possible or not, whether object creation is possible or not, etc. we can specify this information by using an appropriate keyword in java called access mo
3 min read
Java - Final vs Static Access Modifier
Final keyword is used in different contexts. First of all, final is a non-access modifier applicable only to a variable, a method, or a class. Following are different contexts where final is used. While the static keyword in Java is mainly used for memory management. The static keyword in Java is used to share the same variable or method of a given
5 min read
Method Overriding with Access Modifier
Prerequisites: Method Overriding in java and Access Modifier in Java Method Overriding In any object-oriented programming language, Overriding is a feature that allows a subclass or child class to provide a specific implementation of a method that is already provided by its super-class or parent class. When a method in a subclass has the same name,
3 min read
Final vs Static vs Abstract Non-Access Modifier
Modifiers are specific keywords present in Java using that we can make changes to the characteristics of a variable, method, or class and limit its scope. Java programming language has a rich set of Modifiers. Modifiers in Java are divided into two types Access ModifiersNon-Access modifiers Non-access modifiers provide information about the charact
7 min read
Difference Between Public Cloud and Private Cloud
Cloud computing is a way of providing IT infrastructure to customers, it is not just a set of products to be implemented. For any service to be a cloud service, the following five criteria need to be fulfilled as follows: On-demand self-service: Decision of starting and stopping service depends on customers without direct interaction with providers
6 min read
Difference between Private and Public IP addresses
IP Address or Internet Protocol Address is a type of address that is required to communicate one computer with another computer for exchanging information, file, webpage, etc. In this article, we will see the classification of IP Addresses and the differences between Public and Private IP Addresses. Before proceeding with that, let's see what is an
5 min read
Difference between Private key and Public key
Cryptography as a field emphasizes the need to guarantee secure communication and data privacy. There are mainly two approaches available to perform this operation: – Private Key Cryptography (RIC or Symmetric Key Cryptography) and Public Key Cryptography (PKE or Asymmetric Key Cryptography). Although they are used to protect information, they work
6 min read
java.lang.reflect.Modifier Class in Java
The java.lang.reflect.Modifier class contains methods used to get information about class, member and method access modifiers. The modifiers are represented as int value with set bits at distinct positions. The int value represents different modifiers. These values are taken from the tables in sections 4.1, 4.4, 4.5, and 4.7 of The JVM Specificatio
7 min read
private vs private-final injection of dependency
Dependency Injection (DI) is essential for improving code modularity, maintainability, and testability in the context of sophisticated Java programming. Choosing between private and private-final injection for dependencies is a typical DI concern. We will examine the distinctions between these two strategies in this post, as well as their applicati
5 min read
Modifier isNative(mod) method in Java with Examples
The isNative(mod) method of java.lang.reflect.Modifier is used to check if the integer argument includes the native modifier or not. If this integer parameter represents native type Modifier then method returns true else false. Syntax: public static boolean isNative(int mod) Parameters: This method accepts a integer names as mod represents a set of
2 min read
Modifier isFinal(mod) method in Java with Examples
The isFinal(mod) method of java.lang.reflect.Modifier is used to check if the integer argument includes the final modifier or not. If this integer parameter represents final type Modifier then method returns true else false. Syntax: public static boolean isFinal(int mod) Parameters: This method accepts a integer names as mod represents a set of mod
2 min read
Modifier isInterface(mod) method in Java with Examples
The isInterface(mod) method of java.lang.reflect.Modifier is used to check if the integer argument includes the interface modifier or not. If this integer parameter represents interface type Modifier then method returns true else false. Syntax: public static boolean isInterface(int mod) Parameters: This method accepts a integer names as mod represe
2 min read
Modifier isProtected(mod) method in Java with Examples
The isProtected(mod) method of java.lang.reflect.Modifier is used to check if the integer argument includes the protected modifier or not. If this integer parameter represents protected type Modifier then method returns true else false. Syntax: public static boolean isProtected(int mod) Parameters: This method accepts a integer names as mod represe
2 min read
Modifier isPrivate(mod) method in Java with Examples
The isPrivate(mod) method of java.lang.reflect.Modifier is used to check if the integer argument includes the private modifier or not. If this integer parameter represents private type Modifier then method returns true else false. Syntax: public static boolean isPrivate(int mod) Parameters: This method accepts a integer names as mod represents a se
2 min read
Modifier isStatic(mod) method in Java with Examples
The isStatic(mod) method of java.lang.reflect.Modifier is used to check if the integer argument includes the static modifier or not. If this integer parameter represents static type Modifier then method returns true else false. Syntax: public static boolean isStatic(int mod) Parameters: This method accepts a integer names as mod represents a set of
2 min read
Modifier isPublic(mod) method in Java with Examples
The isPublic(mod) method of java.lang.reflect.Modifier is used to check if the integer argument includes the public modifier or not. If this integer parameter represents public type Modifier then method returns true else false. Syntax: public static boolean isPublic(int mod) Parameters: This method accepts a integer names as mod represents a set of
2 min read
Modifier isAbstract(mod) method in Java with Examples
The isAbstract(mod) method of java.lang.reflect.Modifier is used to check if the integer argument includes the abstract modifier or not. If this integer parameter represents abstract type Modifier then method returns true else false. Syntax: public static boolean isAbstract(int mod) Parameters: This method accepts a integer names as mod represents
2 min read
Modifier isStrict(mod) method in Java with Examples
The isStrict(mod) method of java.lang.reflect.Modifier is used to check if the integer argument includes the strictfp modifier or not. If this integer parameter represents strictfp type Modifier then method returns true else false. Syntax: public static boolean isStrict(int mod) Parameters: This method accepts a integer names as mod represents a se
2 min read
Modifier isSynchronized(mod) method in Java with Examples
The isSynchronized(mod) method of java.lang.reflect.Modifier is used to check if the integer argument includes the synchronized modifier or not. If this integer parameter represents synchronized type Modifier then method returns true else false. Syntax: public static boolean isSynchronized(int mod) Parameters: This method accepts a integer names as
2 min read
Modifier isTransient(mod) method in Java with Examples
The isTransient(mod) method of java.lang.reflect.Modifier is used to check if the integer argument includes the transient modifier or not. If this integer parameter represents transient type Modifier then method returns true else false. Syntax: public static boolean isTransient(int mod) Parameters: This method accepts a integer names as mod represe
2 min read
Modifier isVolatile(mod) method in Java with Examples
The isVolatile(mod) method of java.lang.reflect.Modifier is used to check if the integer argument includes the volatile modifier or not. If this integer parameter represents volatile type Modifier then method returns true else false. Syntax: public static boolean isVolatile(int mod) Parameters: This method accepts integer mod as parameter which rep
2 min read
Practice Tags :
three90RightbarBannerImg