जावा सुपर कीवर्ड (उदाहरणों के साथ)

इस ट्यूटोरियल में, हम उदाहरणों की मदद से जावा में सुपर कीवर्ड के बारे में जानेंगे।

superजावा में कीवर्ड पहुँच सुपर क्लास सदस्यों (गुण, निर्माणकर्ता और विधि) के उपवर्गों में प्रयोग किया जाता है।

इससे पहले कि हम superकीवर्ड के बारे में जानें , जावा उत्तराधिकार के बारे में सुनिश्चित करें।

सुपर कीवर्ड का उपयोग

  1. सुपरक्लास के तरीकों को कॉल करने के लिए जो उपवर्ग में ओवरराइड है।
  2. सुपरक्लास की विशेषताओं (फ़ील्ड्स) तक पहुँचने के लिए यदि सुपरक्लास और सबक्लास दोनों में एक ही नाम के गुण हैं।
  3. सुपरक्लास कंस्ट्रक्टर से सुपरक्लास नो-आर्ग (डिफॉल्ट) या पैरामीटराइज्ड कंस्ट्रक्टर को स्पष्ट रूप से कॉल करने के लिए।

आइए इनमें से प्रत्येक उपयोग को समझते हैं।

1. सुपरक्लास के ओवरराइड किए गए तरीके

यदि समान नाम वाली विधियों को सुपरक्लास और उपवर्ग दोनों में परिभाषित किया गया है, तो उपवर्ग में विधि सुपरक्लास में विधि को ओवरराइड करती है। इसे मेथड ओवरराइडिंग कहा जाता है।

उदाहरण 1: विधि ओवरराइडिंग

 class Animal ( // overridden method public void display()( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // overriding method @Override public void display()( System.out.println("I am a dog"); ) public void printMessage()( display(); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printMessage(); ) ) 

आउटपुट

 मैं कुत्ता हूं 

इस उदाहरण में, डॉग क्लास के ऑब्जेक्ट dog1 बनाकर, हम इसकी विधि प्रिंटमैसेज () कह सकते हैं, जो तब display()स्टेटमेंट को निष्पादित करता है ।

चूंकि display()दोनों वर्गों में परिभाषित किया गया है, उपवर्ग डॉग की विधि सुपरक्लास पशु की विधि को ओवरराइड करती है। इसलिए, display()उपवर्ग को कहा जाता है।

क्या होगा अगर सुपरक्लास की ओवरराइड विधि को बुलाया जाना है?

हम उपयोग करते हैं super.display()यदि display()सुपरक्लास पशु की ओवरराइड विधि को बुलाया जाना चाहिए।

उदाहरण 2: सुपर टू कॉल सुपरक्लास विधि

 class Animal ( // overridden method public void display()( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // overriding method @Override public void display()( System.out.println("I am a dog"); ) public void printMessage()( // this calls overriding method display(); // this calls overridden method super.display(); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printMessage(); ) ) 

आउटपुट

 मैं एक कुत्ता हूँ मैं एक जानवर हूँ 

यहां, उपरोक्त कार्यक्रम कैसे काम करता है।

2. सुपरक्लास की एक्सेस विशेषताएँ

सुपरक्लास और उपवर्ग में एक ही नाम के गुण हो सकते हैं। हम superसुपरक्लास की विशेषता तक पहुंचने के लिए कीवर्ड का उपयोग करते हैं।

उदाहरण 3: सुपरक्लास विशेषता पर पहुँचें

 class Animal ( protected String; ) class Dog extends Animal ( public String; public void printType() ( System.out.println("I am a " + type); System.out.println("I am an " + super.type); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printType(); ) ) 

आउटपुट :

 मैं एक स्तनधारी हूँ मैं एक जानवर हूँ 

इस उदाहरण में, हमने सुपरक्लास एनिमल और सबक्लास डॉग दोनों में एक ही उदाहरण क्षेत्र प्रकार को परिभाषित किया है।

हमने तब डॉग क्लास का एक ऑब्जेक्ट dog1 बनाया। फिर, printType()इस ऑब्जेक्ट का उपयोग करके विधि को कहा जाता है।

printType()फ़ंक्शन के अंदर ,

  • प्रकार उपवर्ग डॉग की विशेषता को दर्शाता है।
  • Super.type सुपरक्लास एनिमल की विशेषता को दर्शाता है।

इसलिए, System.out.println("I am a " + type);प्रिंट मैं एक स्तनधारी हूँ। और, System.out.println("I am an " + super.type);प्रिंट मैं एक जानवर हूँ।

3. सुपरक्लास कंस्ट्रक्टर तक पहुंचने के लिए सुपर () का उपयोग

जैसा कि हम जानते हैं, जब किसी वर्ग का ऑब्जेक्ट बनाया जाता है, तो उसका डिफ़ॉल्ट कंस्ट्रक्टर स्वचालित रूप से कहा जाता है।

उपवर्ग निर्माता से सुपरक्लास कंस्ट्रक्टर को स्पष्ट रूप से कॉल करने के लिए, हम उपयोग करते हैं super()। यह superकीवर्ड का एक विशेष रूप है ।

super() उपक्लास कंस्ट्रक्टर के अंदर ही इस्तेमाल किया जा सकता है और पहला स्टेटमेंट होना चाहिए।

उदाहरण 4: सुपर का उपयोग ()

 class Animal ( // default or no-arg constructor of class Animal Animal() ( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // default or no-arg constructor of class Dog Dog() ( // calling default constructor of the superclass super(); System.out.println("I am a dog"); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); ) ) 

आउटपुट

 मैं एक जानवर हूँ मैं एक कुत्ता हूँ 

यहां, जब डॉग क्लास का ऑब्जेक्ट dog1 बनाया जाता है, तो यह स्वचालित रूप से उस क्लास के डिफ़ॉल्ट या नो-आर्ग कंस्ट्रक्टर को कॉल करता है।

Inside the subclass constructor, the super() statement calls the constructor of the superclass and executes the statements inside it. Hence, we get the output I am an animal.

The flow of the program then returns back to the subclass constructor and executes the remaining statements. Thus, I am a dog will be printed.

However, using super() is not compulsory. Even if super() is not used in the subclass constructor, the compiler implicitly calls the default constructor of the superclass.

So, why use redundant code if the compiler automatically invokes super()?

It is required if the parameterized constructor (a constructor that takes arguments) of the superclass has to be called from the subclass constructor.

पैरामीटर super()को हमेशा उपवर्ग के निर्माता के शरीर में पहला बयान होना चाहिए, अन्यथा, हमें एक संकलन त्रुटि मिलती है।

उदाहरण 5: सुपर का उपयोग करके कॉल पैरामीटर संचित करें ()

 class Animal ( // default or no-arg constructor Animal() ( System.out.println("I am an animal"); ) // parameterized constructor Animal(String type) ( System.out.println("Type: "+type); ) ) class Dog extends Animal ( // default constructor Dog() ( // calling parameterized constructor of the superclass super("Animal"); System.out.println("I am a dog"); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); ) ) 

आउटपुट

 प्रकार: पशु मैं एक कुत्ता हूँ 

संकलक स्वचालित रूप से नो-आर्ग कंस्ट्रक्टर को कॉल कर सकता है। हालाँकि, यह पैरामीटर निर्मित निर्माता को कॉल नहीं कर सकता है।

यदि किसी पैरामीटर वाले कंस्ट्रक्टर को बुलाया जाना है, तो हमें उप-निर्माण कंस्ट्रक्टर में इसे स्पष्ट रूप से परिभाषित करने की आवश्यकता है।

ध्यान दें कि उपरोक्त उदाहरण में, हमने स्पष्ट रूप से पैरामीटर किए गए निर्माता को कहा है super("Animal")। कंपाइलर इस मामले में सुपरक्लास के डिफ़ॉल्ट कंस्ट्रक्टर को कॉल नहीं करता है।

दिलचस्प लेख...