ठीक मैं इस समय OOP सीख रहा हूँ, और वहाँ कुछ चीजें मुझे समझ नहीं आता है। उदाहरण के लिए मेरे पास पर्सनप्रोग्राम नामक एक वर्ग है जिसमें मेरा मुख्य शामिल है। कक्षा में मेरे मुख्य विधि के बाहर मेरे पास कई विधियां और कार्य हैं। कक्षा के एक नए उद्देश्य के बिना मैं उन तरीकों और कार्यों को मुख्य से क्यों नहीं बुला सकता? के बाद से वे सभी एक ही कक्षा में कर रहे हैं, यह क्यों) भावना सिर्फ उन्हें किसी भी अन्य विधि की तरह कॉल करने के लिए सक्षम होने के लिए नहीं है,
PersonProgram पी = नए PersonProgram बिना (; पहले?मुझे उस वर्ग का उदाहरण बनाने की आवश्यकता क्यों है जिसमें मैं काम कर रहा हूं?
उत्तर
मैं कक्षाओं की एक नई वस्तु के बिना मुख्य रूप से उन तरीकों और कार्यों को क्यों नहीं बुला सकता?
क्योंकि वे static
नहीं हैं आप उन्हें उपयोग करने के लिए सक्षम होने के लिए एक उदाहरण बनाना होगा। संशोधक जोड़ें, ताकि आप उन्हें एक्सेस कर सकें। उदाहरण के लिए,
private static getSomething()
और फिर, यह से कॉल मुख्य रूप:
getSomething()
इसके अलावा क्या सर्वशक्तिमान @JonSkeet टिप्पणी में कहा पर ध्यान देना। क्योंकि आप एक ही कक्षा के कई उदाहरण हो सकता है
यह अनिवार्य रूप से है।
Dog bigDog = new Dog();
Dog littleDog = new Dog();
अब क्या होगा यदि आप अपने कुत्ते का नाम जानना चाहते हैं? Dog.GetName();
, है ना? कौन सा कुत्ता का नाम वापस आएगा? आपको कक्षा के उदाहरण पर फ़ंक्शन को कॉल करके संकलक को यह बताना होगा।
bigDog.GetName();
आप को संभालने के लिए अपने उत्पाद में अधिक से अधिक 2 व्यक्तियों तो आप के साथ कर सकते हैं, तो
PersonProgram p1 = new PersonProgram();// Have p1.name="First person"
PersonProgram p2 = new PersonProgram();// Have p2.name="Second person"
इतने पर ...
आप जानते हैं कि केवल एक ही व्यक्ति है तो आप स्थैतिक वर्ग बना सकते हैं और आपको नई वस्तु बनाने और उदाहरण बनाने के बिना सीधे उपयोग करने की आवश्यकता नहीं है।
तो OOP तुम दोनों विकल्प, एक का चयन जो आप सूट देता है।
समझ लें कि Object Oriented Programming
के निर्माण के पीछे असली ताकत जोड़ी स्मृति करने के लिए है/संचालन है कि उस पर चलाया जा सकता है के साथ डेटा। तो ओओपी में, ऑब्जेक्ट्स का उद्देश्य अधिकांश डेटा उस डेटा पर सेवाएं प्रदान करने के लिए किया जाता है, जबकि स्थैतिक तरीके मूलभूत प्रक्रियाओं के लिए मूल रूप से होती हैं।
संक्षिप्त उत्तर: क्योंकि मुख्य विधि स्थिर है, जिसका अर्थ है कि यह कक्षा से संबंधित है और विशेष वस्तु नहीं है। स्थिर संदर्भ गैर स्थैतिक संदर्भ का संदर्भ नहीं दे सकते हैं क्योंकि किसी विशेष वस्तु का कोई संदर्भ नहीं है।
लेकिन आप अभी भी अपने अन्य चर और तरीकों static
के सभी कर सकता है, और वहाँ, समस्या, हल है ना?
नहीं। ऐसा नहीं है।
विस्तृत उत्तर है:
मुख्य विधि static
है, क्योंकि अपने आवेदन के कस्टम परिभाषित वस्तुओं में से कोई भी अपने प्रारंभ होने से पहले से मौजूद हैं। आखिरकार, कमरे में मौजूद होने से पहले कमरे में कुछ मौजूद नहीं हो सकता है। JVM को आपके प्रोग्राम में एक प्रविष्टि बिंदु की आवश्यकता है, हालांकि, मुख्य विधि सभी ऑब्जेक्ट संदर्भों से मुक्त होना चाहिए, इसलिए static
।
जावा आपके आवेदन शुरू होने के साथ PersonProgram.main(args)
पर कॉल करता है। अब मान लें कि आपने परिभाषित किया है कि आपके PersonProgram
कक्षा में "व्यक्ति" क्या है। शायद PersonProgram
का नाम, आयु, इत्यादि है लेकिन आपके पास अभी तक PersonProgram
ऑब्जेक्ट्स नहीं हैं, तो main
विधि कैसे पता करती है कि यह किस नाम या आयु के साथ काम कर रहा है?
यहां आपके लिए चीजों को स्पष्ट करने का एक तरीका है: Application
नामक एक नई कक्षा बनाएं और इसमें केवल अपनी मुख्य विधि डालें। अब, अपने PersonProgram
के आवृत्ति चर को संदर्भित करने का प्रयास करें। आप तब तक ऐसा करने में सक्षम नहीं होंगे जब तक आप पहले PersonProgram
ऑब्जेक्ट नहीं बनाते।
आपने अभी ओओपी अवधारणाओं को सीखना शुरू कर दिया है, और आपकी कक्षा परिभाषाओं में main
विधि डालने का विचार भ्रमित हो सकता है। यह कोड को सीखना आसान बनाता है, लेकिन आपको अपने क्लास तर्क से अलग main
विधि को रखने की कोशिश करनी चाहिए क्योंकि आप ओओपी सिद्धांतों को सीखने का प्रयास करते हैं।
इससे बहुत मदद मिली, धन्यवाद। –
बेसिक OOP नियम:
एक वर्ग सभी अपने गैर निजी, गैर-स्थिर सदस्यों उपलब्ध केवल अपने instantiated वस्तु के माध्यम से आता है।
यह तब भी लागू होता है जब सदस्यों को एक ही कक्षा से अनुरोध किया जाता है। यद्यपि आप अपनी कक्षा के निजी सदस्यों तक भी पहुंच सकते हैं।
का उपयोग करने के लिए, आपको विधि को स्थिर बनाना होगा।
- 1. एमएफसी में मुझे CWinApp का वैश्विक उदाहरण बनाने की आवश्यकता क्यों है?
- 2. मुझे इंटरफ़ेस की आवश्यकता क्यों है?
- 3. जावा मानचित्र, कुंजी = वर्ग, मूल्य = उस वर्ग का उदाहरण
- 4. मुझे बैबेल जेएस की आवश्यकता क्यों है?
- 5. मुझे HTML में एक रिपोर्ट बनाने की आवश्यकता है, यह ए 4 आकार है, मैं यह कैसे कर सकता हूं?
- 6. क्या मैं उस कॉलम में शून्य का उपयोग कर सकता हूं जिसमें AUTO_INCREMENT विशेषता
- 7. मैं पाइथन लिपि का पथ कैसे प्राप्त कर रहा हूं जिसमें मैं दौड़ रहा हूं?
- 8. उदाहरण की आवश्यकता है: ggplot2
- 9. मुझे DJANGO_SETTINGS_MODULE सेट की आवश्यकता क्यों है?
- 10. मुझे टाइपिफ़ की आवश्यकता क्यों नहीं है?
- 11. क्यों मेरे अपवाद वर्ग को क्रमबद्ध करने की आवश्यकता है?
- 12. मुझे एक उदाहरण के साथ एक रैपर वर्ग की व्याख्या की आवश्यकता है कि एक बच्चे
- 13. मुझे यहां अर्धविराम की आवश्यकता क्यों है?
- 14. मुझे परियोजना अनुपालन 1.5 में बदलने की आवश्यकता क्यों है?
- 15. विजुअल स्टूडियो मुझे क्यों बता रहा है मुझे सिस्टम को संदर्भित करने की आवश्यकता है। निजी.कोरीलिब?
- 16. यदि मैं चैनलों का सही उपयोग कर रहा हूं तो मुझे म्यूटेक्स का उपयोग करने की आवश्यकता है?
- 17. मैं "एक संलग्न उदाहरण जिसमें X.Y आवश्यक है" को हल कैसे कर सकता हूं?
- 18. जब मैं व्युत्पन्न वर्ग की वस्तु फेंक रहा हूं तो आधार वर्ग का ब्लॉक क्यों अपवाद पकड़ रहा है?
- 19. क्यों जावा उस विधि की अनुमति देता है जिसमें कक्षा का नाम और प्रकार शून्य
- 20. हमें मूल क्वेरी बनाने की आवश्यकता क्यों है?
- 21. मुझे Adapter.notifyDataSetChanged() का उपयोग करने की आवश्यकता क्यों नहीं है?
- 22. उस वर्ग
- 23. क्यों "{} \" की आवश्यकता है?
- 24. मैं मेकफ़ाइल चर में पाथ को कैसे प्रभावित कर सकता हूं? मेरा उदाहरण क्यों काम नहीं कर रहा है?
- 25. मुझे मैक्स एंडपॉइंट और httpGetEnable दोनों की आवश्यकता क्यों है?
- 26. क्यों इस Zend उदाहरण काम कर रहा है जब मैं प्रपत्र
- 27. रीसाइक्लिंग क्यों काम नहीं कर रहा है?
- 28. चयन 2 उदाहरण काम नहीं कर रहा है
- 29. टीसीएल उस प्रो नाम को प्राप्त करता है जिसमें मैं
- 30. मुझे फ़्लिकर एपीआई कुंजी की आवश्यकता क्यों है?
ठीक है अगर वे उदाहरण विधियां हैं, तो उन्हें एक उदाहरण पर काम करना होगा। 'मुख्य 'विधि स्थैतिक है - यह * एक उदाहरण पर ऑपरेटिंग नहीं है। या तो आपकी विधियां उदाहरण स्थिति पर निर्भर नहीं होती हैं, इस मामले में उन्हें * संभवतः * स्थिर होना चाहिए, या वे करते हैं, इस मामले में यह निश्चित रूप से एक उदाहरण बनाने के लिए समझ में आता है। –
ऑब्जेक्ट को पहले बनाए बिना यह समझ में नहीं आता है क्योंकि ओओपी – Jayfray
काम करता है, यह भी मेरा पहला सवाल था जब मैंने जावा सीखना शुरू किया: क्यों दुनिया में मुझे "हैलो, वर्ल्ड!" प्रिंट करने के लिए कक्षा की आवश्यकता है। ? जानकर खुशी हुई कि मैं अकेला नहीं हूं जो सोच रहा है। –