Access Modifiers

About

Access modifiers in Java control the visibility of classes, methods, variables, and constructors. They determine who can access a particular member of a class.

Types of Access Modifiers

Modifier
Accessible Within Class
Accessible Within Package
Accessible in Subclasses
Accessible Outside Package

private

✅ Yes

❌ No

❌ No

❌ No

default (no modifier)

✅ Yes

✅ Yes

❌ No

❌ No

protected

✅ Yes

✅ Yes

✅ Yes

❌ No

public

✅ Yes

✅ Yes

✅ Yes

✅ Yes

1. Private Access Modifier (private)

Scope: Accessible only within the same class. Use case: Used for data hiding and encapsulation.

Example:

class Example {
    private int secretCode = 1234;  // Private variable

    private void displaySecret() {  // Private method
        System.out.println("Secret Code: " + secretCode);
    }

    public void show() {  // Public method to access private members
        displaySecret();
    }
}

public class Main {
    public static void main(String[] args) {
        Example obj = new Example();
        // obj.secretCode = 5678;  // Error: Cannot access private variable
        // obj.displaySecret();    // Error: Cannot access private method
        obj.show();  // Allowed: Indirect access through public method
        // Secret Code: 1234
    }
}

2. Default (No Modifier) Access (Package-Private)

Scope: Accessible within the same package only. Use case: Used when members should be shared within a package but not outside.

Example:

3. Protected Access Modifier (protected)

Scope: Accessible within the same package and in subclasses (even in different packages). Use case: Used for inheritance to allow controlled access to subclasses.

Example:

4. Public Access Modifier (public)

Scope: Accessible everywhere (within and outside the package). Use case: Used when members should be fully accessible.

Example:

Access Modifier Usage with Classes

Modifier
Class
Method
Variable
Constructor

private

❌ Not allowed

✅ Yes

✅ Yes

✅ Yes

default

✅ Yes

✅ Yes

✅ Yes

✅ Yes

protected

❌ Not allowed

✅ Yes

✅ Yes

✅ Yes

public

✅ Yes

✅ Yes

✅ Yes

✅ Yes

Example:

When to Use Which Access Modifier?

Use Case
Best Access Modifier

Hide internal implementation

private

Allow subclass access but hide from external classes

protected

Allow access within the same package

default (no modifier)

Make it accessible to everyone

public

Last updated