इनहेरिटिंग नेस्टेड क्लासेस - 1

"हाय, अमीगो!"

"हाय, किम।"

"मैं आपको स्टैटिक और नॉन-स्टैटिक नेस्टेड क्लासेस इनहेरिट करने के बारे में बताना चाहता हूं।"

"मैं तैयार हूं।"

"स्थिर नेस्टेड कक्षाओं को विरासत में लेने में वास्तव में कोई समस्या नहीं है। उन्हें नियमित कक्षाओं की तरह ही विरासत में मिला है:"

उदाहरण
public class Car
{
 public static class Door
 {

 }
}

public class LamborghiniDoor extends Car.Door
{
}

"लेकिन क्या हम स्टैटिक नेस्टेड क्लासेस को अन्य क्लासेस में स्टैटिक नेस्टेड क्लासेस इनहेरिट कर सकते हैं?"

"क्यों नहीं?"

उदाहरण
public class Car
{
 public static class Door
 {

 }
}

public class Lamborghini extends Car
{
 public static class LamborghiniDoor extends Car.Door
 {
 }
}

"ठीक है, समझ गया। वे नियमित कक्षाओं की तरह ही विरासत में मिले हैं, है ना?"

"हाँ। लेकिन गैर-स्थैतिक नेस्टेड वर्ग (आंतरिक कक्षाओं के रूप में जाना जाता है) आसानी से विरासत में नहीं मिलते हैं।"

"जब एक आंतरिक वर्ग का एक उदाहरण बनाया जाता है, तो इसके बाहरी वर्ग का एक संदर्भ संग्रहीत किया जाता है और निहित रूप से निर्माणकर्ता को दिया जाता है।"

"परिणामस्वरूप, जब आप किसी ऐसे वर्ग की वस्तुएँ बनाते हैं जो एक आंतरिक वर्ग को प्राप्त करता है, तो आपको आवश्यक बाहरी वस्तु को स्पष्ट रूप से पास करना होगा।"

"यह कैसा दिखता है:"

कोड
public class Car
{
 public class Door
 {

 }
}

public class LamborghiniDoor extends Car.Door
{
 LamborghiniDoor(Car car)
 {
  car.super();
 }
}

"आपको निश्चित रूप से डोर कंस्ट्रक्टर को कार ऑब्जेक्ट पास करना होगा। यह एक विशेष निर्माण का उपयोग करके किया जाता है: «car.super()»।

"वैसे, अगर आप बिना किसी पैरामीटर के लेम्बोर्गिनीडूर कंस्ट्रक्टर बनाने की कोशिश करते हैं, तो प्रोग्राम कंपाइल नहीं करेगा। थोड़ा अजीब है, हुह?"

"हाँ, कुछ बारीकियाँ हैं, लेकिन यह रॉकेट साइंस नहीं है।"