2016-02-16 8 views
5

की विरासत सी # में कल्पना का कहना है:OOP और निजी क्षेत्रों

उदाहरण कंस्ट्रक्टर्स, विनाशकर्ता, और स्थिर कंस्ट्रक्टर्स विरासत में मिला नहीं हैं, लेकिन अन्य सभी सदस्यों, उनके घोषित पहुंच की परवाह किए बिना (§3.5) । हालांकि, उनकी घोषित पहुंच के आधार पर, विरासत वाले सदस्य व्युत्पन्न कक्षा में पहुंच योग्य नहीं हो सकते हैं।

इसलिए निजी फ़ील्ड एक व्युत्पन्न कक्षा में विरासत में हैं लेकिन वे पहुंच योग्य नहीं हैं।

हालांकि जावा कल्पना का कहना है:

केवल एक वर्ग है कि संरक्षित घोषित कर रहे हैं या जनता के सदस्यों उपवर्गों में एक जो वर्ग घोषित किया जाता है के अलावा किसी अन्य पैकेज में घोषित से प्राप्त होती हैं।

इसलिए निजी फ़ील्ड व्युत्पन्न कक्षा में विरासत में नहीं हैं।

और ओओपी सिद्धांत की व्याख्या क्या करता है? सही सी # या जावा डिजाइनर है?

इस पहलू पर थोड़ा उलझन में।

पीएस मेरे पास सी ++ अनुभव नहीं है? सी ++ डिजाइनर इस पर क्या कहते हैं?

+2

ओओपी सिद्धांत नहीं है। ओओपी एक सामान्य अवधारणा/प्रोग्रामिंग शैली है जिसे अलग-अलग भाषाओं में विभिन्न तरीकों से समर्थित किया जा सकता है। आप सादे सी – MikeMB

उत्तर

1

कम से कम सी #/जावा-भाग का जवाब देना क्योंकि मुझे सी ++ पर बहुत कुछ पता नहीं है।

हालांकि, उनकी घोषित पहुंच के आधार पर, विरासत वाले सदस्य व्युत्पन्न वर्ग में पहुंच योग्य नहीं हो सकते हैं।

सी # -स्पेक थोड़ा और सार्थक प्रतीत होता है, हालांकि जावा निजी मेबर्स को उसी तरह से संभालता है। बेस-क्लास के निजी सदस्य भी जावा में मौजूद हैं (हालांकि वे विरासत में नहीं हैं, are private fields inherited in Java? देखें)। चूंकि आप उन्हें एक्सेस नहीं कर सकते हैं, वैसे भी यह उपयोगी नहीं है। हालांकि आंतरिक सदस्यों को भी निजी सदस्यों को स्थापित करके शुरू किया जाता है। तो निश्चित रूप से अपने व्युत्पन्न वर्ग के उदाहरण आधार वर्ग के सभी निजी सदस्यों है, विरासत लेकिन जिसका मतलब है आप ओवरराइड कर सकता है बहुरूपता के किसी भी प्रकार का मतलब है (अपने सदस्य मानते हुए नहीं static या final/selead है) उन्हें जो निजी सदस्यों पर कोई मतलब नहीं है।

तो पीछा करने के लिए आना आंतरिक रूप से पहुंचने की आवश्यकता नहीं है, न तो सी # और न ही जावा में और न ही कहीं और। बस मान लें कि आपके व्युत्पन्न उदाहरण सभी बेस-सदस्यों को पूरी तरह से प्रारंभिक और अपना वास्तविक कार्य करते हैं।

जिसे आप "ओओपी-सिद्धांत" कहते हैं उससे संबंधित मुझे संदेह है कि इस सिद्धांत (जो निर्दिष्ट भाषाओं में विभिन्न तरीकों से लागू किया गया है) के लिए एक क्लीनर उत्तर है, निजी सदस्यों की कोई प्रासंगिकता नहीं है। ओओपी केवल अपने आसपास के आंतरिक वस्तुओं के साथ वस्तुओं के बीच बातचीत को संभालता है।

4

खैर, सी # संस्करण है अधिक साफ क्योंकि जावा में भी, निजी क्षेत्रों बच्चे वस्तु के हिस्से के रूप में उपलब्ध हो जाएगा, लेकिन वे नहीं किया जाएगा सीधे पहुँचा जा सकता जब तक आप माता-पिता कक्षा में एक सार्वजनिक गेटर है इसका मूल्य प्राप्त करने के लिए।

आप वास्तव में निजी क्षेत्रों (अभिभावक के) सुलभ बनाने और उनके मूल्यों को सीधे पढ़ने के लिए प्रतिबिंब का उपयोग कर सकते हैं।

+0

में ओओपी भी कर सकते हैं आप कैसे साबित कर सकते हैं कि जावा निजी फ़ील्ड में भी विरासत में मिला है? मुझे लगता है कि कल्पना आधिकारिक दस्तावेज है और यह नहीं कहता है! – xdevel2000

+0

@ xdevel2000 - क्या होगा यदि आपके पास माता-पिता में निजी क्षेत्र के लिए सार्वजनिक गेटटर है? .. वह विधि बच्चे में क्या बदलेगी? यदि वह मान भी अस्तित्व में नहीं था, तो वास्तव में सार्वजनिक तरीकों को विरासत में लाने की अनुमति क्या होगी? – TheLostMind

+0

इस बिंदु पर सार्वजनिक क्षेत्र नहीं है। मुद्दा यह है कि यदि व्युत्पन्न वर्ग निजी सदस्य का उत्तराधिकारी है लेकिन यह तब तक पहुंच योग्य नहीं है। – xdevel2000

3

चीजों को सरल और साफ रखना, बोली का कुछ हिस्सा आप ग के लिए उल्लेख किया ++ लेने

हालांकि, उनके घोषित पहुंच के आधार पर, विरासत में मिला के सदस्यों को एक व्युत्पन्न वर्ग में सुलभ नहीं हो सकता है।

जावा में भी यही बात होती है। आप जावा में भी निजी फ़ील्ड तक नहीं पहुंच सकते हैं।

पहुँच जो एक और कहानी (कैप्सूलीकरण)

1

मुझे लगता है कि भ्रम की स्थिति एक भ्रामक शब्दों से संबंधित है के लिए उनके आसपास तरीकों रहे हैं। जावा या सी # या किसी अन्य ओओ भाषा में, यदि आप एक बच्चे का निर्माण करते हैं तो आपको अभिभावक कन्स्ट्रक्टर को कॉल करना होगा, क्योंकि माता-पिता बच्चे का हिस्सा हैं। अक्सर माता-पिता कन्स्ट्रक्टर का कॉल पूरी तरह से किया जाता है।

तो माता-पिता से निजी गुण हमेशा बच्चे के ऑब्जेक्ट में मौजूद होते हैं। फिर ओओपी सुनिश्चित करता है कि आप बच्चे के भीतर निजी विशेषताओं तक नहीं पहुंच सकते हैं। यह encapsulation महत्वपूर्ण बिंदु है। और इस तथ्य को दो संदर्भों द्वारा वर्णित किया गया है: या तो आप इसे गुणों को विरासत में नहीं मिला या आप कहते हैं कि वे विरासत में हैं लेकिन दिखाई नहीं दे रहे हैं।

जैसा ऊपर बताया गया है कि आप (प्रतिबंध) इन प्रतिबंधों को प्राप्त करने के लिए प्रतिबिंब पुस्तकालय का उपयोग कर सकते हैं।

संबंधित मुद्दे