हम इस ट्यूटोरियल में सीखने वाले है कि जावा ओवरराइडिंग (Java Overriding in Hindi) और हम इसे कैसे इस्तमाल कर सकते हैं? पिछले अध्याय में हमने सुपरक्लास और सबक्लास के बारे में बात की थी। यदि कोई वर्ग अपने सुपरक्लास से एक विधि प्राप्त करता है, तो विधि को ओवरराइड करने का एक मौका होता है provided कि यह अंतिम रूप से चिह्नित न हो।
Table of Contents
अधिलेखन का लाभ है: उपवर्ग प्रकार के लिए विशिष्ट व्यवहार को परिभाषित करने की क्षमता, जिसका अर्थ है कि एक उपवर्ग अपनी आवश्यकता के आधार पर एक मूल वर्ग पद्धति को लागू कर सकता है।
ऑब्जेक्ट-ओरिएंटेड शब्दों में ओवरराइडिंग का मतलब किसी मौजूदा पद्धति की कार्यक्षमता को ओवरराइड करना है।
उदाहरण
आइए एक उदाहरण देखें।
class Animal {
public void move() {
System.out.println(“Animals can move”);
}
}
class Dog extends Animal {
public void move() {
System.out.println(“Dogs can walk and run”);
}
}
public class TestDog {
public static void main(String args[]) {
Animal a = new Animal(); // Animal reference and object
Animal b = new Dog(); // Animal reference but Dog object
a.move(); // runs the method in Animal class
b.move(); // runs the method in Dog class
}
}
यह निम्नलिखित परिणाम देगा –
Output
Animals can move
Dogs can walk and run
उपरोक्त उदाहरण में, आप देख सकते हैं कि भले ही b एक प्रकार का Animal है, यह डॉग क्लास में मूव मेथड चलाता है। इसका कारण है: कंपाइल टाइम में रेफरेंस टाइप पर चेक किया जाता है। हालाँकि, रनटाइम में, JVM ऑब्जेक्ट प्रकार का पता लगाता है और उस विशेष ऑब्जेक्ट से संबंधित विधि को चलाएगा।
इसलिए उपरोक्त उदाहरण में प्रोग्राम ठीक से संकलित होगा क्योंकि एनिमल क्लास में मेथड मूव है। फिर, रनटाइम पर यह उस ऑब्जेक्ट के लिए विशिष्ट विधि चलाता है।
निम्नलिखित उदाहरण पर विचार करें –
Example
class Animal {
public void move() {
System.out.println(“Animals can move”);
}
}
class Dog extends Animal {
public void move() {
System.out.println(“Dogs can walk and run”);
}
public void bark() {
System.out.println(“Dogs can bark”);
}
}
public class TestDog {
public static void main(String args[]) {
Animal a = new Animal(); // Animal reference and object
Animal b = new Dog(); // Animal reference but Dog object
a.move(); // runs the method in Animal class
b.move(); // runs the method in Dog class
b.bark();
}
}
यह निम्नलिखित परिणाम देगा –
Output
TestDog.java:26: error: cannot find symbol
b.bark();
^
symbol: method bark()
location: variable b of type Animal
1 error
यह प्रोग्राम संकलन समय त्रुटि फेंक देगा क्योंकि बी के संदर्भ प्रकार पशु के पास छाल के नाम से कोई विधि नहीं है।
मेथड ओवरराइडिंग के नियम (Rules for Method Overriding)
- तर्क सूची बिल्कुल ओवरराइड विधि के समान होनी चाहिए।
- रिटर्न प्रकार समान होना चाहिए या सुपरक्लास में मूल ओवरराइड विधि में घोषित रिटर्न प्रकार का उप प्रकार होना चाहिए।
- एक्सेस स्तर ओवरराइड विधि के एक्सेस स्तर से अधिक प्रतिबंधित नहीं हो सकता है। उदाहरण के लिए: यदि सुपरक्लास विधि को सार्वजनिक घोषित किया जाता है तो उप वर्ग में ओवरराइडिंग विधि निजी या संरक्षित नहीं हो सकती।
- इंस्टेंस विधियों को तभी ओवरराइड किया जा सकता है जब वे उपवर्ग द्वारा विरासत में मिली हों।
- अंतिम घोषित विधि को ओवरराइड नहीं किया जा सकता है।
- स्टैटिक घोषित की गई विधि को ओवरराइड नहीं किया जा सकता है, लेकिन इसे फिर से घोषित किया जा सकता है।
- यदि कोई विधि इनहेरिट नहीं की जा सकती है, तो उसे ओवरराइड नहीं किया जा सकता है।
- उदाहरण के सुपरक्लास के समान पैकेज के भीतर एक उपवर्ग किसी भी सुपरक्लास विधि को ओवरराइड कर सकता है जिसे निजी या अंतिम घोषित नहीं किया गया है।
- एक अलग पैकेज में एक उपवर्ग केवल सार्वजनिक या संरक्षित घोषित गैर-अंतिम तरीकों को ओवरराइड कर सकता है।
- ओवरराइडिंग विधि किसी भी अनचेक अपवाद को फेंक सकती है, भले ही ओवरराइड विधि अपवादों को फेंके या नहीं। हालांकि, ओवरराइडिंग विधि को चेक किए गए अपवादों को नहीं फेंकना चाहिए जो ओवरराइड विधि द्वारा घोषित किए गए अपवादों की तुलना में नए या व्यापक हैं। ओवरराइडिंग विधि ओवरराइड विधि की तुलना में संकीर्ण या कम अपवादों को फेंक सकती है।
- कंस्ट्रक्टर्स को ओवरराइड नहीं किया जा सकता है।
सुपर कीवर्ड का उपयोग करना (Using the super Keyword)
ओवरराइड विधि के सुपरक्लास संस्करण को लागू करते समय सुपर कीवर्ड का उपयोग किया जाता है।
Example
class Animal {
public void move() {
System.out.println(“Animals can move”);
}
}
class Dog extends Animal {
public void move() {
super.move(); // invokes the super class method
System.out.println(“Dogs can walk and run”);
}
}
public class TestDog {
public static void main(String args[]) {
Animal b = new Dog(); // Animal reference but Dog object
b.move(); // runs the method in Dog class
}
}
यह निम्नलिखित परिणाम देगा –
Output
Animals can move
Dogs can walk and run
हम उम्मीद करते है कि आपको “जावा ओवरराइडिंग (Java Overriding in Hindi)” से सम्बंधित जानकारी हिंदी में समझ में आयी होंगी यदि आपको बताई गई जानकारी अच्छी लगी हो तो अपने दोस्तों में ऐसे शेयर करे जिससे उनकी भी हेल्प हो सके धन्यवाद!