मेथड ओवर-राइडिंग क्या है ?
किसी पैरेंट क्लास में डिफाइन की गयी किसी मेथड का दूसरा वर्शन चाइल्ड क्लास में डिफाइन करना मेथड ओवर-राइडिंग कहलाता है।
मेथड ओवर-राइडिंग कैसे काम करता है ?
जब किसी पैरेंट क्लास को इन्हेरिट करके एक चाइल्ड क्लास बनायीं जाती है तो उस चाइल्ड क्लास का ऑब्जेक्ट उन सभी मेथड्स को तो कॉल कर ही सकता है जो उस चाइल्ड क्लास में डिफाइन की गयी है पर साथ ही वह ऑब्जेक्ट उन सभी मेथड्स को भी कॉल कर सकता है जो पैरेंट क्लास में बनायीं गयी है।
उदहारण के लिए इस प्रोग्राम को देखे -
//TestAnimal.java // http://technology-mantra.blogspot.in/ class Animal{ public void speak(){ System.out.println("Animal is speaking something..."); } } class Dog extends Animal{ // We did not define any method in this class } public class TestAnimal{ public static void main(String args[]){ Dog tommy = new Dog(); // A new dog object "tommy" tommy.speak(); } }
यहाँ Animal नाम की एक पैरेंट क्लास है जिसको इन्हेरिट करके Dog नाम की एक चाइल्ड क्लास बनायीं गयी है, Animal क्लास में speak() मेथड डिफाइन की गयी है और Dog क्लास में किसी भी मेथड को डिफाइन नहीं किया गया है।
अब जब TestAnimal क्लास में Dog क्लास का एक ऑब्जेक्ट tommy बनाते है और इस ऑब्जेक्ट से speak() मेथड को कॉल करते है तब कम्पाइलर सबसे पहले Dog क्लास में speak नाम की मेथड देखता है। चुकी Dog क्लास में speak() नाम की मेथड नहीं है इसलिए कम्पाइलर पैरेंट क्लास Animal में स्थित speak() मेथड को कॉल करेगा
और आउटपुट :-
Animal is speaking something...
पर कभी कभी प्रोग्रामर चाहता है कि पैरेंट और चाइल्ड दोनों क्लास के लिए एक ही मेथड के अलग अलग वर्शन हो, तब मेथड ओवर-राइडिंग का उपयोग किया जाता है।
उदहारण के लिए इस प्रोग्राम को देखे -
//TestAnimal.java // http://technology-mantra.blogspot.in/ class Animal{ public void speak(){ System.out.println("Animal is speaking something..."); } } class Dog extends Animal{ public void speak(){ System.out.println("Bhow Bhow"); } } class Cat extends Animal{ public void speak(){ System.out.println("Meow Meow"); } } public class TestAnimal{ public static void main(String args[]){ Dog tommy = new Dog(); // A new dog object "tommy" Cat kitty = new Cat(); // A new cat object "kitty" Animal xyz = new Animal(); // A new animal object xyz tommy.speak(); kitty.speak(); xyz.speak(); } }
इस प्रोग्राम में हमने Dog और Cat क्लास बनायीं है जो की Animal क्लास की चाइल्ड क्लास है। तीनो क्लास में speak() नाम की मेथड के अलग अलग वर्शन डिफाइन किये गए है।
Dog क्लास का ऑब्जेक्ट tommy और cat क्लास का ऑब्जेक्ट kitty और Animal क्लास का ऑब्जेक्ट xyz बनाया। तीनो ऑब्जेक्ट से speak() मेथड को कॉल करने पर हर ऑब्जेक्ट से सम्बंधित क्लास में डिफाइन की गयी speak() मेथड कॉल होगी और आउटपुट कुछ इस प्रकार होगा :-
Bhow Bhow
Meow Meow
Animal is speaking something...
Meow Meow
Animal is speaking something...
मेथड ओवर-राइडिंग के नियम :-
1) चाइल्ड क्लास और पैरेंट क्लास में डिफाइन की गयी मेथड के नाम समान होना चाहिए।
2) चाइल्ड क्लास और पैरेंट क्लास में डिफाइन की गयी मेथड का प्रोटोटाइप / सिग्नेचर (पैरामीटर्स की संख्या, डेटा टाइप) समान होना चाहिए।
c भाषा प्रोग्रामिंग सीखने के लिए नमूनों की कोडिंग
ReplyDeleteटर्मिनल पासवर्ड c प्रोग्राम कोड