Access Modifiers in Java
Access Modifiers in Java control the visibility (accessibility) of
classes, methods, constructors, and variables to other classes or
packages.
Types of Access Modifiers:
Modifier Access Level Accessible From
public Most accessible Any class in any
package
protected Accessible in the Same package or
same package and subclass (even if
in subclasses (even it's in a different
in other packages) package)
no modifier Also called default Only within the
or package-private same package
private Most restrictive Only within the
same class
Explanation with Examples:
1. public
Visible everywhere (any package/class can access it).
public class Animal {
public void speak() {
System.out.println("Animal speaks");
}
}
2. private
Only accessible within the same class.
Used for encapsulation (e.g., private fields with public
getters/setters).
class Animal {
private void breathe() {
System.out.println("Animal breathes");
}
}
3. protected
Accessible in the same package and in subclasses (even if
subclass is in another package).
class Animal {
protected void eat() {
System.out.println("Animal eats");
}
}
4. Default (No Modifier)
No keyword is written.
Accessible only within the same package.
class Animal {
void run() {
System.out.println("Animal runs");
}
}
Summary Table
Modifier Same Same Subclass Other
Class Package (other Package
package)
public ✅ ✅ ✅ ✅
protected ✅ ✅ ✅ ❌ (unless
subclass )
default ✅ ✅ ❌ ❌
private ✅ ❌ ❌ ❌