Access Modifiers in Java | Control Access Levels

Access modifiers in Java control the visibility and accessibility of classes, methods, and variables. They define how other classes can interact with a given class or its members, promoting encapsulation and modularity.

Types of Access Modifiers in Java:

Comparison of Access Modifiers:

Access Modifier Class Package Subclass Global
Public Yes Yes Yes Yes
Protected Yes Yes Yes No
Default (Package-Private) Yes Yes No No
Private Yes No No No

Example of Access Modifiers in Java:

This example demonstrates the use of different access modifiers in a Java class.

Code Example


package com.example.access;
public class AccessExample {
    public int publicVariable = 1;
    protected int protectedVariable = 2;
    int defaultVariable = 3; // package-private
    private int privateVariable = 4;

    public void publicMethod() {
        System.out.println("Public Method");
    }

    protected void protectedMethod() {
        System.out.println("Protected Method");
    }

    void defaultMethod() {
        System.out.println("Default Method");
    }

    private void privateMethod() {
        System.out.println("Private Method");
    }
}

Using Access Modifiers:

This example shows access to the AccessExample class members from another class in the same package and a subclass in a different package.

Access within the Same Package

Code Example 2


package com.example.access;
public class SamePackageAccess {
    public static void main(String[] args) {
        AccessExample example = new AccessExample();
        System.out.println(example.publicVariable); // Accessible
        System.out.println(example.protectedVariable); // Accessible
        System.out.println(example.defaultVariable); // Accessible
        // System.out.println(example.privateVariable); // Not accessible

        example.publicMethod(); // Accessible
        example.protectedMethod(); // Accessible
        example.defaultMethod(); // Accessible
        // example.privateMethod(); // Not accessible
    }
}

Access from a Subclass in a Different Package

Code Example 3


package com.example.subclass;
import com.example.access.AccessExample;
public class SubclassAccess extends AccessExample {
    public static void main(String[] args) {
        SubclassAccess example = new SubclassAccess();
        System.out.println(example.publicVariable); // Accessible
        System.out.println(example.protectedVariable); // Accessible
        // System.out.println(example.defaultVariable); // Not accessible
        // System.out.println(example.privateVariable); // Not accessible

        example.publicMethod(); // Accessible
        example.protectedMethod(); // Accessible
        // example.defaultMethod(); // Not accessible
        // example.privateMethod(); // Not accessible
    }
}

Output

Public Method
Protected Method
Default Method

Detailed Explanation:

Access modifiers are essential in Java to create robust, secure, and modular programs with well-defined visibility and access control.