जब मैं public
विधि के साथ protected
विधि को ओवरराइड करता हूं तो जावा कंपाइलर शिकायत नहीं करता है। वास्तव में यहाँ क्या हो रहा है? क्या यह मूल विधि को ओवरराइड या छुपा रहा है क्योंकि मूल विधि में कम दृश्यता है?मैं सार्वजनिक विधि के साथ संरक्षित विधि को ओवरराइड क्यों कर सकता हूं?
उत्तर
एक उप-वर्ग हमेशा एक्सेस संशोधक को विस्तृत कर सकता है, क्योंकि यह अभी भी सुपर-क्लास के लिए एक वैध प्रतिस्थापन है। Requirements in Overriding and Hiding के बारे में जावा विनिर्देश से:
पहुँच संशोधक (§6.6) एक अधिभावी की या विधि छुपा, ओवरराइड या छिपा विधि के रूप में कम से कम के रूप में ज्यादा एक्सेस प्रदान करना होगा इस प्रकार है:
- हैं ओवरराइड या छुपी विधि सार्वजनिक है, तो ओवरराइडिंग या छिपाने की विधि सार्वजनिक होनी चाहिए; अन्यथा, एक संकलन-समय त्रुटि होती है।
- यदि ओवरराइड या छुपी विधि सुरक्षित है, तो ओवरराइडिंग या छिपाने की विधि को संरक्षित या सार्वजनिक किया जाना चाहिए; अन्यथा, एक संकलन-समय त्रुटि होती है।
- यदि ओवरराइड या छुपी विधि में डिफ़ॉल्ट (पैकेज) पहुंच है, तो ओवरराइडिंग या छिपाने की विधि निजी नहीं होनी चाहिए; अन्यथा, एक संकलन-समय त्रुटि होती है।
एक बाहरी वर्ग की दृष्टि से, सार्वजनिक विधि के बाद से बाहरी वर्ग वैसे भी संरक्षित विधि का उपयोग नहीं कर सकता है, बस एक नई विधि, नहीं एक अधिभावी तरीका है।
दूसरी तरफ, दृश्यता को कम करने की अनुमति नहीं है क्योंकि बाहरी वर्ग हमेशा उप-वर्ग के किसी ऑब्जेक्ट को संदर्भित करने के लिए सुपर-क्लास के प्रकार का संदर्भ उपयोग कर सकता है और उसी विधि को कॉल कर सकता है।
दृश्यता केवल बाहरी पहुंच को प्रभावित करती है। public
विधि होने के नाते कोई बाहरी वर्ग इसे कॉल कर सकता है।
ओवरराइडिंग विधि का एक्सेस स्तर मूल विधि की दृश्यता को प्रभावित नहीं करता है। ओवरराइड के बाद, किसी भी एक्सेस स्तर के साथ, मूल विधि को केवल उप-वर्ग में super
पर कॉल करके एक्सेस किया जा सकता है।
- 1. स्काला: निर्दिष्ट सार्वजनिक विधि संरक्षित विधि
- 2. क्या मैं एक छिपी हुई (लेकिन सार्वजनिक) विधि को ओवरराइड कर सकता हूं और इसकी सुपर विधि कह सकता हूं?
- 3. जब मैं सार्वजनिक विधि के अंदर हूं तो मैं निजी विधि क्यों नहीं कह सकता?
- 4. मैं इंटरफ़ेस में सार्वजनिक विधि क्यों घोषित नहीं कर सकता?
- 5. NHibernate अपवाद: विधि जोड़ें होना चाहिए 'सार्वजनिक/संरक्षित आभासी' या
- 6. संरक्षित विधि
- 7. क्या मैं एक गैर वर्चुअल विधि ओवरराइड करने वाली विधि का उपयोग कर सकता हूं?
- 8. मैं वर्ग या विधि के लिए सोनार में SQUID: Unused संरक्षित विधि अक्षम कैसे कर सकता हूं?
- 9. संरक्षित विधि
- 10. मॉकिंग संरक्षित विधि
- 11. जब मैं बराबर() विधि को ओवरराइड करता हूं तो मुझे हैशकोड() को ओवरराइड क्यों करना चाहिए?
- 12. मैं एक संपत्ति सेटर को कैसे ओवरराइड कर सकता हूं?
- 13. मैं एक ओवरराइड वर्चुअल विधि के 'आधार कार्यान्वयन' को कैसे कॉल कर सकता हूं?
- 14. उसी नाम के साथ ज्योथन ओवरराइड विधि
- 15. परीक्षण अगर किसी संरक्षित विधि को
- 16. क्या मैं स्कैला में जावा संरक्षित पहुंच के साथ एक विधि बना सकता हूं?
- 17. मैं django मॉडल में विधि कैसे प्राप्त कर सकता हूं?
- 18. "सार्वजनिक/संरक्षित/निजी" विधि कैसे कार्यान्वित की जाती है, और मैं इसे कैसे अनुकरण कर सकता हूं?
- 19. मैं क्लास विधि के लिए उपनाम विधि को गतिशील रूप से कैसे परिभाषित कर सकता हूं?
- 20. विधि केवल सार्वजनिक में से एक सेट/संरक्षित/निजी
- 21. जूनिट संरक्षित विधि
- 22. रेल/रूबी मैं माइग्रेशन विधि टाइमस्टैम्प को कैसे ओवरराइड कर सकता हूं
- 23. मैं TryParse को ओवरराइड कैसे कर सकता हूं?
- 24. संरक्षित तरीकों को ओवरराइड करना
- 25. सार्वजनिक ऑनक्रेट(), या संरक्षित() पर संरक्षित?
- 26. मैं सी # में ToString() विधि को ओवरराइड कैसे कर सकता हूं?
- 27. क्या मैं विरासत में केवल एक ही विधि को ओवरराइड कर सकता हूं?
- 28. क्या मैं स्कैला में किसी अज्ञात फ़ंक्शन की ToString विधि को ओवरराइड कर सकता हूं?
- 29. मैं जावा में एक ArrayList की ToString विधि को ओवरराइड कैसे कर सकता हूं?
- 30. विस्तार विधि के साथ एक विधि ओवरराइड (या छाया)?