Basic se Advanced tak — har concept clearly samjhao with VS Code–style code examples. Minimum 3–5 programs per topic.
Access Modifiers control karte hain ki koi class, method, ya variable kahan se accessible hai. Java mein 4 types hain.
Kahan se accessible hai — ek nazar mein samjho.
| Modifier | Same Class | Same Package | Subclass (Diff Pkg) | Other Package |
|---|---|---|---|---|
| public | ✔ | ✔ | ✔ | ✔ |
| protected | ✔ | ✔ | ✔ | ✘ |
| default | ✔ | ✔ | ✘ | ✘ |
| private | ✔ | ✘ | ✘ | ✘ |
Sabse open access — koi bhi class, koi bhi package se access kar sakta hai.
Same package + subclass (even different package) se accessible. Inheritance ke liye perfect.
Koi keyword nahi likhte — automatic package-level access. Same package mein sab accessible, bahar kuch bhi nahi.
Sabse restricted — sirf us class ke andar accessible. Encapsulation ka backbone.
Top-level class ke liye sirf public ya default allowed hai. abstract, final, static (nested) bhi dekhte hain.
Constructor par bhi access modifier lagta hai — yeh control karta hai ki kahan se object ban sakta hai.
Real-world patterns — encapsulation, inheritance combinations, inner classes, interface aur lambda ke saath modifiers.
Top interview questions jo Java access modifiers pe pooche jaate hain — clear aur concise answers ke saath.
public (sabko access), protected (same pkg + subclass), default (no keyword, same pkg only), aur private (sirf us class mein). Visibility order: private < default < protected < public.private — sirf us class ke andar accessible. default — same package ke andar kisi bhi class se accessible. Dono alag package se accessible nahi hote, lekin default same-package classes mein freely use ho sakta hai jabki private sirf apni class tak simit hai.public ya default ho sakti hai. private aur protected sirf nested classes, methods, aur fields ke liye use hote hain. Private top-level class ka koi matlab nahi kyunki koi use access hi nahi kar sakta.default — sirf same package mein kaam karta hai, inheritance se koi fark nahi. protected — same package PLUS alag package ki subclass mein bhi accessible hai. Agar class B extends A hai aur A protected hai, to B alag package mein bhi A ke protected members access kar sakti hai.protected hai, to child ushe public bana sakta hai — lekin private ya default nahi. Ye Liskov Substitution Principle ke against hoga.private banao, aur unhe public getter/setter methods se access karo. Isse data hiding milti hai aur setters mein validation add kar sakte hain. Ye Java mein encapsulation ka standard pattern hai.private constructor se class ko directly instantiate hone se rokta hai. Use cases: (1) Singleton Pattern — sirf ek instance chahiye, (2) Utility classes jaise Math — sirf static methods hain, (3) Builder/Factory Pattern — creation logic control karna. new MyClass() compile error dega bahar se.public abstract hote hain (unless default ya static keyword use ho, Java 8+). Isliye interface implement karte waqt methods ko public hi likhna padta hai — tighter access allowed nahi.static members access kar sakti hai. Object banana: new Outer.Inner(). Non-static inner class — outer class ke saare members (private bhi) directly access kar sakti hai, lekin outer object zaruri hai: outerObj.new Inner().