๐ Access Modifiers Overview in Java
Java provides four levels of access control:
| Modifier | Same Class | Same Package | Subclass (any pkg) | Other Packages |
|---|---|---|---|---|
public | โ | โ | โ | โ |
| default (no modifier) | โ | โ | โ | โ |
protected | โ | โ | โ | โ |
private | โ | โ | โ | โ |
๐ Default Access (Package-Private)
โ๏ธ Meaning:
- No modifier means default access.
- The class or member is accessible only within the same package.
๐ฆ Example:
// File: com/example/Vehicle.java
package com.example;
class Vehicle { // default access
void move() {
System.out.println("Vehicle is moving");
}
}
// File: com/example/Test.java
package com.example;
public class Test {
public static void main(String[] args) {
Vehicle v = new Vehicle(); // โ
Accessible (same package)
v.move();
}
}
// File: com/other/Test2.java
package com.other;
import com.example.Vehicle;
public class Test2 {
public static void main(String[] args) {
Vehicle v = new Vehicle(); // โ Compile error (different package)
}
}
๐ Protected Access
โ๏ธ Meaning:
- Accessible in the same package
- Also accessible in subclasses, even in different packages (through inheritance only)
๐ฆ Example:
// File: com/example/Animal.java
package com.example;
public class Animal {
protected void sound() {
System.out.println("Animal sound");
}
}
// File: com/other/Dog.java
package com.other;
import com.example.Animal;
public class Dog extends Animal {
public void bark() {
sound(); // โ
Allowed because Dog extends Animal
}
}
// File: com/other/TestDog.java
package com.other;
import com.example.Animal;
public class TestDog {
public static void main(String[] args) {
Animal a = new Animal();
a.sound(); // โ Not allowed: protected method via reference
}
}
๐ To access a protected method in a subclass outside the package, you must call it from inside that subclassโnot via object reference.
๐ฏ Interview Tips & Common Questions
๐ Common Java Interview Questions
- Q: What’s the difference between default and protected access?
- A: Default allows access within the same package only. Protected allows access within the same package + from subclasses outside the package (via inheritance).
- Q: Can a protected class be accessed from a different package?
- A: A class cannot be declared protected. Only class members (fields and methods) can be protected.
- Q: How do protected members behave in subclass vs object reference?
- A: In a subclass, you can access protected members directly. But from an object of superclass, you cannot access protected members outside the package.
- Q: Can a top-level class have default or protected access?
- A: A top-level class can be
publicor default only.protectedis not allowed for top-level classes.
๐ง Key Takeaways
- ๐ข Use default when your class is only used internally in the same package.
- ๐ข Use protected to expose members to subclasses across packages.
- โ
protected classis invalid for top-level classes. - โ ๏ธ Be careful when accessing protected methodsโit must be through inheritance in other packages.