# this बनाम super, गहराई से — कोर जावा

Source: https://www.geekswithgeeks.com/hi/core-java/java-this-super

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

## हर एक का मतलब

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

## दोनों साथ

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

```java
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(...)` दोनों में से कोई भी कंस्ट्रक्टर की **पहली स्टेटमेंट** के रूप में ही आ सकता है, और एक ही कंस्ट्रक्टर में दोनों कभी साथ नहीं। हर कंस्ट्रक्टर में इनिशियलाइज़ेशन का ठीक एक ही रास्ता होना चाहिए।
