Java Access Modifiers – Complete Guide with Examples


Learn all Java access modifiers, including public, private, protected, and default (package-private), with examples to control access to classes, methods, and variables for secure object-oriented programming.

Access Modifiers in Java – Complete Detailed Tutorial

Access Modifiers in Java are keywords used to set the visibility or accessibility of classes, methods, and variables.

They help in data encapsulation and security in object-oriented programming.

1. Types of Access Modifiers

Java has four main access modifiers:

ModifierClassPackageSubclassWorld
publicYesYesYesYes
privateYesNoNoNo
protectedYesYesYesNo
default (no keyword)YesYesNoNo

2. public Access Modifier

  1. The member is accessible from anywhere
  2. Used for classes, methods, and variables

Example:


public class Person {
public String name;

public void display() {
System.out.println("Name: " + name);
}
}

public class Main {
public static void main(String[] args) {
Person p = new Person();
p.name = "Chinmaya"; // accessible
p.display(); // accessible
}
}

Output:


Name: Chinmaya

3. private Access Modifier

  1. The member is accessible only within the same class
  2. Commonly used for data hiding and encapsulation

Example:


class BankAccount {
private double balance; // private variable

// getter method
public double getBalance() {
return balance;
}

// setter method
public void setBalance(double balance) {
this.balance = balance;
}
}

public class Main {
public static void main(String[] args) {
BankAccount account = new BankAccount();
account.setBalance(5000); // use setter
System.out.println("Balance: $" + account.getBalance()); // use getter
}
}

Output:


Balance: $5000.0

4. protected Access Modifier

  1. Accessible within same package and subclasses (even in different package)
  2. Often used in inheritance

Example:


class Animal {
protected String color = "White";
}

class Dog extends Animal {
void showColor() {
System.out.println("Dog color: " + color); // accessible in subclass
}
}

public class Main {
public static void main(String[] args) {
Dog d = new Dog();
d.showColor();
}
}

Output:


Dog color: White

5. default Access Modifier (Package-Private)

  1. If no modifier is specified, it is called default
  2. Accessible only within the same package
  3. Not accessible outside the package

Example:


class Person {
String name; // default access

void display() {
System.out.println("Name: " + name);
}
}

public class Main {
public static void main(String[] args) {
Person p = new Person();
p.name = "Chinmaya";
p.display();
}
}

Output:


Name: Chinmaya

6. Summary of Access Modifiers

ModifierClassPackageSubclassWorld
publicYesYesYesYes
privateYesNoNoNo
protectedYesYesYesNo
defaultYesYesNoNo

Key Points:

  1. private → data hiding
  2. protected → inheritance support
  3. public → accessible everywhere
  4. default → package-level access