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 | ||||
| public | Yes | Yes | Yes | Yes |
| private | Yes | No | No | No |
| protected | Yes | Yes | Yes | No |
| default (no keyword) | Yes | Yes | No | No |
2. public Access Modifier
- The member is accessible from anywhere
- 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
- The member is accessible only within the same class
- 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
- Accessible within same package and subclasses (even in different package)
- 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)
- If no modifier is specified, it is called default
- Accessible only within the same package
- 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 | ||||
| public | Yes | Yes | Yes | Yes |
| private | Yes | No | No | No |
| protected | Yes | Yes | Yes | No |
| default | Yes | Yes | No | No |
Key Points:
- private → data hiding
- protected → inheritance support
- public → accessible everywhere
- default → package-level access