🚪
OOP

Access Modifiers और Packages

Who Can See What
💡 Access modifiers घर के दरवाज़ों जैसे हैं — public दरवाज़ा सबके लिए खुला, private सिर्फ़ तुम्हारे अपने कमरे का, protected सिर्फ़ family (subclass) के लिए, और default सिर्फ़ same colony (package) के लोगों के लिए।

public: कहीं से भी access हो सकता है। private: सिर्फ़ उसी class के अंदर। protected: same package + subclasses में। default (कुछ ना लिखो): सिर्फ़ same package में।

Package related classes का एक folder/group है — जैसे java.util में List, Map जैसे collection classes होते हैं। अपना package बनाने के लिए "package com.code10x;" लिखते हैं।

package com.code10x;

public class Robot {
  private int battery;
  protected void charge() { battery = 100; }
}
🚪
Access modifiers घर के दरवाज़ों जैसे हैं — public दरवाज़ा सबके लिए खुला, private सिर्फ़ तुम्हारे अपने कमरे का, protected सिर्फ़ family (subclass) के लिए, और default सिर्फ़ same colony (package) के लोगों के लिए।
1 / 6
इस page में (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.