Interview question
What are Access Modifiers in Java? Java में Access Modifiers क्या हैं?
Answer
Access modifiers control the visibility and accessibility of classes, methods, and variables. Java has four access levels: public, protected, default (package-private), and private.
| Modifier | Same Class | Same Package | Different Package (Subclass) | Different Package (Other) |
|---|---|---|---|---|
| public | ✓ | ✓ | ✓ | ✓ |
| protected | ✓ | ✓ | ✓ | ✗ |
| default (no modifier) | ✓ | ✓ | ✗ | ✗ |
| private | ✓ | ✗ | ✗ | ✗ |
// Access Modifiers Example
public class AccessModifierDemo {
// Public - accessible everywhere
public int publicVar = 10;
public void publicMethod() {
System.out.println('Public method');
}
// Protected - accessible in same package and subclasses
protected int protectedVar = 20;
protected void protectedMethod() {
System.out.println('Protected method');
}
// Default (package-private) - accessible in same package only
int defaultVar = 30;
void defaultMethod() {
System.out.println('Default method');
}
// Private - accessible only in same class
private int privateVar = 40;
private void privateMethod() {
System.out.println('Private method');
}
}
// Same package, different class
public class SamePackage {
public static void main(String[] args) {
AccessModifierDemo obj = new AccessModifierDemo();
obj.publicVar; // ✓ Accessible
obj.publicMethod(); // ✓ Accessible
obj.protectedVar; // ✓ Accessible
obj.protectedMethod(); // ✓ Accessible
obj.defaultVar; // ✓ Accessible
obj.defaultMethod(); // ✓ Accessible
// obj.privateVar; // ✗ Compile Error
// obj.privateMethod(); // ✗ Compile Error
}
}
// Different package
public class DifferentPackage {
public static void main(String[] args) {
AccessModifierDemo obj = new AccessModifierDemo();
obj.publicVar; // ✓ Accessible
obj.publicMethod(); // ✓ Accessible
// obj.protectedVar; // ✗ Compile Error (unless subclass)
// obj.defaultVar; // ✗ Compile Error
// obj.privateVar; // ✗ Compile Error
}
}
// Best Practices:
// 1. Use private for data members (encapsulation)
// 2. Use public for public API methods
// 3. Use protected for methods meant for subclasses
// 4. Use default only when intentional (package-level access)| Modifier | Visibility |
|---|---|
| public | सभी जगह accessible |
| protected | Same package + subclasses |
| default | Same package only |
| private | Same class only |
Was this answer clear?