"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > उपवर्ग ऑब्जेक्ट के लिए सुपरक्लास संदर्भ का उपयोग करना

उपवर्ग ऑब्जेक्ट के लिए सुपरक्लास संदर्भ का उपयोग करना

2024-11-19 को प्रकाशित
ब्राउज़ करें:972

Using a Superclass Reference for a Subclass Object

एक परिदृश्य पर विचार करें जहां हम उपयोगकर्ता नामक एक वर्ग बनाते हैं और फिर एक उपवर्ग बनाते हैं जो उपयोगकर्ता को विस्तारित करता है जिसे कर्मचारी कहा जाता है।
आमतौर पर, हम उपयोगकर्ता का एक उदाहरण बनाते हैं:
के साथ

User user = new User();

यहाँ उपयोगकर्ता वेरिएबल उपयोगकर्ता का प्रकार है, उपयोगकर्ता वह वेरिएबल है जो क्लास का उदाहरण रखता है, और नया उपयोगकर्ता() उपयोगकर्ता का एक नया उदाहरण बनाता है।
सीधे शब्दों में कहें तो उपयोगकर्ता, उपयोगकर्ता का एक उदाहरण है।


लेकिन क्या होगा यदि सुपरक्लास उपयोगकर्ता को इसके उपवर्ग कर्मचारी में परिभाषित तरीकों का उपयोग करने की आवश्यकता हो? ऐसा कभी होता है क्या?
संक्षिप्त उत्तर है हां, लेकिन केवल ओवरराइड तरीकों के लिए (ऐसी विधियां जो सुपरक्लास और सबक्लास दोनों में मौजूद हैं)। यही बहुरूपता को सक्षम बनाता है।
चूंकि विरासत में संबंध "is-a" संबंध है, कर्मचारी एक उपयोगकर्ता है। इसलिए, उपयोगकर्ता को इसके उपवर्ग कर्मचारी के उदाहरण का संदर्भ रखने से कोई नहीं रोकता, जब तक कि यह एक संगत प्रकार है।

यह अग्रानुसार होगा:

User user = new Employee();

अब, मान लें कि उपयोगकर्ता वर्ग में दो विधियां हैं:

  1. getUserName()
  2. getUserSalary().

जबकि कर्मचारी वर्ग में getEmployeeInformation() नामक एक अतिरिक्त विधि है और getUserSalary() विधि को ओवरराइड करता है।

फिर उपयोगकर्ता उपयोगकर्ता के साथ = नया कर्मचारी();:

  1. user.getUserName() काम करेगा, जैसा कि User वर्ग में परिभाषित है।

  2. user.getUserSalary() भी काम करेगा, लेकिन आउटपुट कर्मचारी वर्ग में ओवरराइड getUserSalary() विधि से होगा, न कि User में से एक से। . यह बहुरूपता का सार है।

  3. user.getEmployeeInformation() काम नहीं करेगा। यह एक संकलन त्रुटि देगा क्योंकि यह कर्मचारी वर्ग के लिए विशिष्ट है।

एक संकलन त्रुटि तब होती है जब कंपाइलर को सिंटैक्स त्रुटियां, प्रकार बेमेल, या अन्य उल्लंघन जैसे मुद्दे मिलते हैं जो सफल कोड संकलन को रोकते हैं।

यदि हम इसके विपरीत करने का प्रयास करते हैं और एक उपवर्ग ऑब्जेक्ट कर्मचारी को सुपरक्लास संदर्भ उपयोगकर्ता के साथ संदर्भित करते हैं, तो यह मैन्युअल कास्टिंग के बिना काम नहीं करेगा! इसके लिए स्पष्ट कास्टिंग की आवश्यकता है, क्योंकि उपयोगकर्ता आवश्यक रूप से एक कर्मचारी नहीं है।


अपकास्टिंग वी.एस. डाउनकास्टिंग

इसे एक सरल उदाहरण के साथ, सरल तरीके से समझाने के बाद, आइए शर्तों पर ध्यान केंद्रित करें।

"उपवर्ग ऑब्जेक्ट का सुपरक्लास संदर्भ" को आम तौर पर अपकास्टिंग कहा जाता है। सीधे शब्दों में कहें तो, अपकास्टिंग एक चाइल्ड ऑब्जेक्ट को पैरेंट ऑब्जेक्ट में टाइपकास्ट करना है, और यह निहित रूप से होता है (मतलब कंपाइलर इसे स्वचालित रूप से संभालता है, इसलिए हमें किसी विशिष्ट कास्टिंग सिंटैक्स की आवश्यकता नहीं है)। यह वैसा ही है जब हमने User user = new Employee(); किया था।

डाउनकास्टिंग के बारे में क्या?

डाउनकास्टिंग अपकास्टिंग के बिल्कुल विपरीत है।

याद रखें जब हमने कहा था कि उपयोगकर्ता उदाहरण से कर्मचारी संदर्भ बनाना अमान्य है? इसे डाउनकास्टिंग कहा जाता है, और इसे स्पष्ट रूप से कास्टिंग सिंटैक्स का उपयोग करके किया जाना चाहिए। जबकि अपकास्टिंग बहुत सुरक्षित है, डाउनकास्टिंग जोखिम का कारण बनता है। इसका मतलब यह नहीं है कि यह उपयोगी नहीं है, लेकिन इसका उपयोग सावधानी के साथ किया जाना चाहिए।

मैं डाउनकास्टिंग के बारे में बहुत अधिक विस्तार में नहीं जाऊंगा क्योंकि यह लेख अपकास्टिंग पर केंद्रित है, लेकिन मुख्य बिंदु डाउनकास्टिंग और अपकास्टिंग के बीच मुख्य अंतर दिखा रहा है।


और वह एक कवर हैं! :)

विज्ञप्ति वक्तव्य यह लेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/khaledsalshibani/using-a-superclass-reference-for-a-subclass-object-22ga?1 यदि कोई उल्लंघन है, तो हटाने के लिए कृपया [email protected] पर संपर्क करें यह
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3