Answer
Access Modifiers in Java
Access modifiers control the visibility and accessibility of classes, methods, constructors, and fields.
The 4 Access Modifiers
| Modifier | Same Class | Same Package | Subclass | Everywhere |
|---|---|---|---|---|
| private | ✅ | ❌ | ❌ | ❌ |
| default (none) | ✅ | ✅ | ❌ | ❌ |
| protected | ✅ | ✅ | ✅ | ❌ |
| public | ✅ | ✅ | ✅ | ✅ |
1. private — Most Restrictive
Only accessible within the same class.
Java
public class Employee {
private String salary; // only this class can access
private void calculateBonus() { ... } // private method
public String getSalary() {
return salary; // public getter exposes private field safely
}
}
2. default (no keyword) — Package-Private
Accessible within the same package only.
Java
class DatabaseConfig { // no modifier = default
String connectionUrl; // default field
void connect() { ... } // default method
}
// Accessible only within same package
3. protected — Package + Subclasses
Accessible in same package AND in subclasses (even in different packages).
Java
public class Vehicle {
protected int speed; // accessible to subclasses
protected void accelerate() {
speed += 10;
}
}
public class Car extends Vehicle {
public void drive() {
accelerate(); // ✅ can access protected method from parent
speed = 60; // ✅ can access protected field
}
}
4. public — Most Open
Accessible from anywhere — any class, any package.
Java
public class MathUtils {
public static int add(int a, int b) {
return a + b;
}
}
// Any class anywhere can call MathUtils.add(2, 3)
Best Practices (Encapsulation)
Java
public class User {
private String username; // private field
private String password; // private field
public String getUsername() { return username; } // public getter
public void setUsername(String u) { this.username = u; } // public setter
// No getter/setter for password — intentionally hidden
public boolean authenticate(String input) {
return this.password.equals(input);
}
}
In Automation Frameworks
Java
public class BasePage {
protected WebDriver driver; // subclasses (LoginPage, HomePage) can use it
private String baseUrl; // only BasePage needs this
public void openUrl(String url) { driver.get(url); } // public for tests
}
