🏠
OOP

Class & Object

Blueprint vs Real Thing
💡 Class ek ghar ka blueprint (naksha) hai. Object us naksha se bana ek asli ghar — aur tum ek naksha se kayi ghar bana sakte ho!

Class define karti hai ki object ke paas kya properties (fields) aur kya behavior (methods) honge.

Object class ka ek "instance" hota hai — real cheez jisko tum use kar sakte ho, apni values ke saath.

class Car {
  String color;
  void drive() { System.out.println(color + " car driving!"); }
}
Car myCar = new Car();
myCar.color = "Red";
myCar.drive();
🏠
Class ek ghar ka blueprint (naksha) hai. Object us naksha se bana ek asli ghar — aur tum ek naksha se kayi ghar bana sakte ho!
1 / 6
Is page mein (3 subtopics)

Fields (variables) class ki "state" hote hain — data jo object apne paas rakhta hai (jaise Car ka color, speed). Methods "behavior" hote hain — kaam jo object kar sakta hai (jaise Car ka drive(), brake()). Ek class dono ka combination hoti hai: "ye cheez kya hai" (fields) aur "ye kya kar sakti hai" (methods).

Fields ko "attributes" ya "properties" bhi kehte hain, aur methods ko "behaviors" ya "functions". Real-world modeling mein, tum jab bhi ek class design karo, khud se do sawaal poochho: "is cheez ke paas kya information hogi?" (fields) aur "ye cheez kya-kya kar sakti hai?" (methods).

💡Tip: Class design karte waqt, pehle real-world noun socho (Car, Student, Order), phir uske adjectives (fields — color, name, total) aur verbs (methods — drive, study, checkout) list karo.

Ek hi class se banaye gaye alag-alag objects apni-apni independent field values rakhte hain — ek object ki value change karne se doosre object par koi asar nahi padta. Ye isliye hota hai kyunki har "new" call se ek naya, alag memory block (Heap mein) allocate hota hai.

Static fields is rule ka exception hain (jaise "this-static" topic mein detail se dekhoge) — wo class-level hoti hain, isliye sab objects mein shared rehti hain, ek change karne se sabme dikhta hai.

Car car1 = new Car();
Car car2 = new Car();
car1.color = "Red";
car2.color = "Blue";  // car1.color abhi bhi "Red" hi hai
System.out.println(car1 == car2); // false — do alag objects hain

Jab tum "new Car()" likhte ho, exactly ye hota hai step-by-step: (1) Heap memory mein jagah allocate hoti hai object (uske saare instance fields) ke liye, (2) fields ko default values milti hain (0, null, false), (3) constructor chalta hai jo fields ko meaningful starting values deta hai, (4) ek "reference" (memory address) return hota hai jo variable (jo khud Stack mein hota hai, agar local variable ho) mein store hota hai.

Isliye variable khud object NAHI hota — wo sirf ek reference/address hota hai jo Heap mein padi asli cheez ki taraf point karta hai. Yehi wajah hai ki object assign karne par (car2 = car1) dono variables same object ko point karne lagte hain (copy nahi banti, sirf address copy hota hai) — isse "aliasing" kehte hain.

StackHeap
Kya store hota haiLocal variables, referencesActual objects, instance fields
LifetimeMethod khatam, gayaJab tak koi reference bache, GC tak
SpeedFastThoda slow (GC overhead)
⚠️Common Mistake: car2 = car1; ek copy NAHI banata — dono ab same object point karte hain. Agar car2.color badloge, car1.color bhi badal jaayega! Real copy ke liye naya object khud banana padta hai.