पाठ 23 / 38

this बनाम super, गहराई से

this और super के हर उपयोग को स्पष्ट करें — वर्तमान इंस्टेंस, कंस्ट्रक्टर चेनिंग, फ़ील्ड में अस्पष्टता हटाना, और पैरेंट के ओवरराइड मेथड तक पहुँचना।

हर एक का मतलब

this वर्तमान ऑब्जेक्ट को दर्शाता है — समान नाम वाले पैरामीटर से फ़ील्ड अलग करने, वर्तमान इंस्टेंस कहीं और भेजने, या this(...) से दूसरे कंस्ट्रक्टर तक चेन करने में उपयोगी। super वर्तमान ऑब्जेक्ट के तुरंत सुपरक्लास भाग को दर्शाता है — super.method()super(...) के लिए उपयोग होता है।

दोनों साथ

super.describe() पैरेंट का वर्शन बुलाता है भले ही Dog उसे ओवरराइड करता हो, जिससे चाइल्ड व्यवहार को पूरी तरह बदलने की बजाय विस्तारित कर सके।

class Animal {
    protected String name;
    Animal(String name) { this.name = name; }
    String describe() { return "Animal: " + name; }
}
class Dog extends Animal {
    Dog(String name) { super(name); }
    @Override String describe() {
        return super.describe() + " (a dog)";
    }
}

नियम

this(...) और super(...) दोनों में से कोई भी कंस्ट्रक्टर की पहली स्टेटमेंट के रूप में ही आ सकता है, और एक ही कंस्ट्रक्टर में दोनों कभी साथ नहीं। हर कंस्ट्रक्टर में इनिशियलाइज़ेशन का ठीक एक ही रास्ता होना चाहिए।