🚪
OOP

Access Modifiers & Packages

Who Can See What
💡 Access modifiers ghar ke darwazon jaise hain — public darwaza sabke liye khula, private sirf tumhare apne kamre ka, protected sirf family (subclass) ke liye, aur default sirf same colony (package) ke logon ke liye.

public: kahin se bhi access ho sakta hai. private: sirf usi class ke andar. protected: same package + subclasses mein. default (kuch na likho): sirf same package mein.

Package related classes ka ek folder/group hai — jaise java.util mein List, Map jaise collection classes hote hain. Apna package banane ke liye "package com.code10x;" likhte hain.

package com.code10x;

public class Robot {
  private int battery;
  protected void charge() { battery = 100; }
}
🚪
Access modifiers ghar ke darwazon jaise hain — public darwaza sabke liye khula, private sirf tumhare apne kamre ka, protected sirf family (subclass) ke liye, aur default sirf same colony (package) ke logon ke liye.
1 / 6
Is page mein (4 subtopics)

Java mein 4 access levels hain, aur inka effect depend karta hai ki accessing code kaha se hai — same class, same package, subclass (chahe alag package mein ho), ya poori duniya (koi bhi jagah).

ModifierSame ClassSame PackageSubclass (diff package)World
public
protected
default (kuch na likho)
private
💡Tip: Rule of thumb: hamesha sabse restrictive access se shuru karo (private), aur sirf tabhi zyada khol (protected/public) jab genuinely zaroorat ho. Ye "principle of least privilege" hai — accidental misuse rokta hai.

Har .java file top par "package com.code10x.model;" likh sakti hai — folder structure package naam se match karna chahiye (com/code10x/model/ folder mein file honi chahiye). Doosri jagah use karne ke liye "import com.code10x.model.Student;" likhte hain, ya poore package ke liye import com.code10x.model.*;

java.lang package (String, Integer, System, etc.) automatically har file mein import hota hai, explicit import ki zaroorat nahi.

import static se static members bina class-prefix ke directly use kar sakte ho — jaise import static java.lang.Math.*; ke baad seedha sqrt(25) likh sakte ho, Math.sqrt(25) ki jagah. Zyada use karne se code confusing ho sakta hai (pata nahi chalta method kaha se aaya) — isliye sparingly use karo, mainly test frameworks (JUnit ke assertEquals) mein common hai.

Classpath JVM ko batata hai kaha dhoonde compiled .class files aur libraries. Modern build tools (Maven, Gradle) automatically classpath manage kar dete hain (dependencies download karke sahi jagah rakhte hain), lekin samajhna zaroori hai ki JVM runtime par classes kaise dhoondhti hai — agar "ClassNotFoundException" aaye, aksar classpath issue hoti hai.