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
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
)
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:
class PackageExample {
int packageVariable = 42; // Default access modifier
void display() { // Default method
System.out.println("Package Variable: " + packageVariable);
}
}
public class Main {
public static void main(String[] args) {
PackageExample obj = new PackageExample();
obj.display(); // Allowed: Same package
}
}
3. Protected Access Modifier (protected
)
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:
class Parent {
protected String message = "Hello from Parent!"; // Protected variable
}
class Child extends Parent {
void showMessage() {
System.out.println(message); // Allowed: Accessible in subclass
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.showMessage();
// Hello from Parent!
}
}
4. Public Access Modifier (public
)
public
)Scope: Accessible everywhere (within and outside the package). Use case: Used when members should be fully accessible.
Example:
class PublicExample {
public String message = "Public Access!"; // Public variable
public void showMessage() { // Public method
System.out.println(message);
}
}
public class Main {
public static void main(String[] args) {
PublicExample obj = new PublicExample();
obj.showMessage(); // Allowed: Public access
// Public Access!
}
}
Access Modifier Usage with Classes
private
❌ Not allowed
✅ Yes
✅ Yes
✅ Yes
default
✅ Yes
✅ Yes
✅ Yes
✅ Yes
protected
❌ Not allowed
✅ Yes
✅ Yes
✅ Yes
public
✅ Yes
✅ Yes
✅ Yes
✅ Yes
Example:
// Allowed: Public class
public class Car {
private String engine; // Private variable
protected int speed; // Protected variable
public String model; // Public variable
// Constructor
public Car(String model, int speed) {
this.model = model;
this.speed = speed;
}
private void startEngine() { // Private method
System.out.println("Engine started!");
}
protected void accelerate() { // Protected method
System.out.println(model + " is accelerating.");
}
public void displayInfo() { // Public method
System.out.println("Car Model: " + model + ", Speed: " + speed);
}
}
When to Use Which 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