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; }
}- Complexity छुपाओ, essentials दिखाओ
- abstract class / interface से define होता है
- "क्या" बताओ, "कैसे" implementer decide करे
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 करते हैं।
| Abstraction | Encapsulation | |
|---|---|---|
| Focus | क्या दिखाना है (design) | कैसे protect करना है (implementation) |
| Achieve होता है | abstract class, interface से | private fields + getter/setter से |
| Example | Car का steering — internals hidden | Account.balance private होना |