🚗
OOP

Abstraction

Hiding Complexity
💡 Car चलाते वक़्त तुम सिर्फ़ steering और pedal use करते हो — engine के अंदर क्या हो रहा है, वो दिखना ज़रूरी नहीं। यही Abstraction है!

Abstraction complex implementation को छुपाकर सिर्फ़ ज़रूरी चीज़ें दिखाता है।

abstract class या interface से हम "क्या करना है" बताते हैं, "कैसे करना है" वो implementing class decide करती है।

abstract class Shape {
  abstract double area();
}
class Circle extends Shape {
  double r;
  double area() { return 3.14 * r * r; }
}
🎛️
Car चलाते वक़्त तुम सिर्फ़ steering और pedal use करते हो — engine के अंदर क्या हो रहा है, वो दिखना ज़रूरी नहीं। यही Abstraction है!
1 / 4
⚡ झट से Recap
  • Complexity छुपाओ, essentials दिखाओ
  • abstract class / interface से define होता है
  • "क्या" बताओ, "कैसे" implementer decide करे
इस page में (3 subtopics)

abstract class को directly "new" नहीं कर सकते (new Shape() error देगा अगर Shape abstract है) — सिर्फ़ उसकी concrete (non-abstract) subclasses को instantiate कर सकते हो। इसमें abstract methods (बिना body के, सिर्फ़ signature — abstract double area();) और normal methods (with body) दोनों हो सकते हैं।

जो भी class इसे extend करती है, उसे सारे abstract methods implement करने ही पड़ेंगे — वरना वो child class भी abstract होनी चाहिए (आगे pass कर दी गई responsibility)।

abstract class Shape {
  abstract double area();          // no body
  void display() {                  // normal method, body hai
    System.out.println("Area: " + area());
  }
}

जब related classes के बीच कुछ common code share करना हो (जैसे सब Shapes का display() method same हो सकता है — एक ही जगह लिखा), और कुछ behavior हर child को ख़ुद define करना हो (area() अलग formula हर shape की — Circle का formula अलग, Square का अलग)।

Interface के उलट, abstract class में "half-done" implementation already होती है — इसलिए ये तब best fit है जब classes genuinely related हों (IS-A relationship strong हो), ना कि सिर्फ़ एक common capability share कर रही हों।

ये दोनों अलग concepts हैं जो अक्सर confuse होते हैं, especially interviews में। Encapsulation "कैसे" (data को protect/bundle करना, private+getter/setter) के बारे में है — implementation-level detail।

Abstraction "क्या दिखाना है" (complexity छुपाना, सिर्फ़ essential interface दिखाना) के बारे में है — design-level decision। एक car चलाते वक़्त steering wheel दिखना (Abstraction — सिर्फ़ ज़रूरी controls) और engine parts private रहना (Encapsulation — internal details protected) — दोनों साथ चलते हैं लेकिन अलग purpose serve करते हैं।

AbstractionEncapsulation
Focusक्या दिखाना है (design)कैसे protect करना है (implementation)
Achieve होता हैabstract class, interface सेprivate fields + getter/setter से
ExampleCar का steering — internals hiddenAccount.balance private होना