जावा का अध्ययन करते समय, मुझे बहुरूपता की अवधारणा का सामना करना पड़ा। व्यावहारिक उपयोग में जाने से पहले मूलभूत सिद्धांतों को समझने की मेरी प्रवृत्ति है, इसलिए मैंने यहां अपनी व्याख्या का दस्तावेजीकरण किया है।
बहुरूपता का मूल अर्थ "विविधता" है। हालाँकि, इस लेख के संदर्भ में, यह विभिन्न प्रकार की वस्तुओं को रखने के लिए एक चर की क्षमता को संदर्भित करता है, जब तक कि वर्ग विरासत या इंटरफ़ेस कार्यान्वयन के माध्यम से कोई त्रुटि उत्पन्न किए बिना संबंध होता है।
आम तौर पर, एक चर का प्रकार उसके द्वारा संदर्भित ऑब्जेक्ट के प्रकार से मेल खाता है।
Animal animal = new Animal();
हालाँकि, जब ऑब्जेक्ट किसी क्लास का विस्तार करता है, तो वेरिएबल को सुपरक्लास के प्रकार के रूप में माना जा सकता है।
Animal animal = new Dog(); // Dog extends Animal
इसके अलावा, यदि कोई ऑब्जेक्ट एक इंटरफ़ेस लागू करता है, तो इसे इंटरफ़ेस प्रकार के रूप में माना जा सकता है।
// Interface definition interface Animal { void makeSound(); // Method in the interface } // Classes implementing the interface class Dog implements Animal { public void makeSound() { System.out.println("Woof!"); // Dog-specific implementation } } class Cat implements Animal { public void makeSound() { System.out.println("Meow!"); // Cat-specific implementation } } // Main method public class Main { public static void main(String[] args) { // Assign objects to variables of the interface type Animal myDog = new Dog(); Animal myCat = new Cat(); // Call the interface method myDog.makeSound(); // Outputs "Woof!" myCat.makeSound(); // Outputs "Meow!" } }
यह हमें लचीली कोडिंग को सक्षम करते हुए विभिन्न वर्गों को एक ही प्रकार से संभालने की अनुमति देता है।
एक चर का प्रकार और एक वस्तु का प्रकार कैसे भिन्न होता है, इस पर चर्चा करते समय, यह सवाल उठता है: वास्तव में "प्रकार" क्या है? अपने विश्लेषण के आधार पर, मैंने निष्कर्ष निकाला है कि एक प्रकार निम्नलिखित उद्देश्यों को पूरा करता है:
पहले के उदाहरण का संदर्भ देते हुए:
Animal animal = new Dog(); // Dog extends Animal
इसका तात्पर्य यह है कि मेमोरी डॉग के लिए आवंटित की गई है, लेकिन वेरिएबल सामग्री को एनिमल के रूप में व्याख्या करता है। इस अवधारणा को इस तरह देखा जा सकता है:
एक प्रकार फ़िल्टर लेंस की तरह कार्य करता है, जो यह निर्धारित करता है कि डेटा को कैसे देखा जाता है। लेंस को बदलकर, आप सुपरक्लास में सामान्य तरीकों या इंटरफेस के माध्यम से विशिष्ट तरीकों पर ध्यान केंद्रित कर सकते हैं।
किसी को आश्चर्य हो सकता है कि यदि बहुरूपता का लाभ सभी वर्गों में सामान्य तरीकों को संभालना है तो हम हमेशा सुपरक्लास के साथ वेरिएबल घोषित क्यों नहीं करते हैं। इसका कारण यह है कि ऐसे मामलों में मेमोरी केवल सुपरक्लास के डेटा के लिए आवंटित की जाती है।
हालाँकि एक उपवर्ग को एक सुपरक्लास (अपकास्टिंग) में डालना संभव है, लेकिन इसका विपरीत सत्य नहीं है। ऐसा इसलिए है क्योंकि एक उपवर्ग में सुपरक्लास का डेटा और उसका अपना अनूठा डेटा शामिल होता है। इसलिए, मेमोरी को उपवर्ग के लिए पूर्व-आवंटित किया जाता है, जिससे अपकास्टिंग के माध्यम से उपवर्ग-विशिष्ट तरीकों के उपयोग की अनुमति मिलती है।
इंटरफ़ेस भी प्रकार के रूप में कार्य करते हैं, और ऑब्जेक्ट की मेमोरी में संग्रहीत डेटा को संसाधित करने के लिए फ़िल्टर लेंस के रूप में उनकी भूमिका अवधारणात्मक रूप से कक्षाओं के समान होती है। इंटरफ़ेस के माध्यम से लागू की गई विधियाँ ऑब्जेक्ट के प्रकार से निर्धारित होती हैं, न कि वेरिएबल के प्रकार (डायनामिक बाइंडिंग) से। यह इस विचार को पुष्ट करता है कि चर का प्रकार केवल एक फ़िल्टर के रूप में कार्य करता है, जिससे हमें फ़िल्टर किए गए डेटा का उपयोग करने की अनुमति मिलती है।
बहुरूपता उन परिदृश्यों में उपयोगी है जहां व्यक्तिगत विशेषताओं का लाभ उठाते हुए सामान्य प्रक्रियाओं को एकीकृत करने की आवश्यकता होती है। अपने अन्वेषण के माध्यम से, मुझे यह बेहतर समझ प्राप्त हुई कि जबकि किसी ऑब्जेक्ट का मेमोरी लेआउट उसके प्रकार से निर्धारित होता है, वेरिएबल का प्रकार यह नियंत्रित करता है कि उस मेमोरी की व्याख्या कैसे की जाती है - मेरे लिए एक महत्वपूर्ण अहसास।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3