2017-01-23 6 views
5

ठीक मैं इस समय OOP सीख रहा हूँ, और वहाँ कुछ चीजें मुझे समझ नहीं आता है। उदाहरण के लिए मेरे पास पर्सनप्रोग्राम नामक एक वर्ग है जिसमें मेरा मुख्य शामिल है। कक्षा में मेरे मुख्य विधि के बाहर मेरे पास कई विधियां और कार्य हैं। कक्षा के एक नए उद्देश्य के बिना मैं उन तरीकों और कार्यों को मुख्य से क्यों नहीं बुला सकता? के बाद से वे सभी एक ही कक्षा में कर रहे हैं, यह क्यों) भावना सिर्फ उन्हें किसी भी अन्य विधि की तरह कॉल करने के लिए सक्षम होने के लिए नहीं है,
PersonProgram पी = नए PersonProgram बिना (; पहले?मुझे उस वर्ग का उदाहरण बनाने की आवश्यकता क्यों है जिसमें मैं काम कर रहा हूं?

+9

ठीक है अगर वे उदाहरण विधियां हैं, तो उन्हें एक उदाहरण पर काम करना होगा। 'मुख्य 'विधि स्थैतिक है - यह * एक उदाहरण पर ऑपरेटिंग नहीं है। या तो आपकी विधियां उदाहरण स्थिति पर निर्भर नहीं होती हैं, इस मामले में उन्हें * संभवतः * स्थिर होना चाहिए, या वे करते हैं, इस मामले में यह निश्चित रूप से एक उदाहरण बनाने के लिए समझ में आता है। –

+0

ऑब्जेक्ट को पहले बनाए बिना यह समझ में नहीं आता है क्योंकि ओओपी – Jayfray

+0

काम करता है, यह भी मेरा पहला सवाल था जब मैंने जावा सीखना शुरू किया: क्यों दुनिया में मुझे "हैलो, वर्ल्ड!" प्रिंट करने के लिए कक्षा की आवश्यकता है। ? जानकर खुशी हुई कि मैं अकेला नहीं हूं जो सोच रहा है। –

उत्तर

4

मैं कक्षाओं की एक नई वस्तु के बिना मुख्य रूप से उन तरीकों और कार्यों को क्यों नहीं बुला सकता?

क्योंकि वे static

नहीं हैं आप उन्हें उपयोग करने के लिए सक्षम होने के लिए एक उदाहरण बनाना होगा। संशोधक जोड़ें, ताकि आप उन्हें एक्सेस कर सकें। उदाहरण के लिए,

private static getSomething() 

और फिर, यह से कॉल मुख्य रूप:

getSomething() 

इसके अलावा क्या सर्वशक्तिमान @JonSkeet टिप्पणी में कहा पर ध्यान देना। क्योंकि आप एक ही कक्षा के कई उदाहरण हो सकता है

0

यह अनिवार्य रूप से है।

Dog bigDog = new Dog(); 
Dog littleDog = new Dog(); 

अब क्या होगा यदि आप अपने कुत्ते का नाम जानना चाहते हैं? Dog.GetName();, है ना? कौन सा कुत्ता का नाम वापस आएगा? आपको कक्षा के उदाहरण पर फ़ंक्शन को कॉल करके संकलक को यह बताना होगा।

bigDog.GetName(); 
0

आप को संभालने के लिए अपने उत्पाद में अधिक से अधिक 2 व्यक्तियों तो आप के साथ कर सकते हैं, तो

PersonProgram p1 = new PersonProgram();// Have p1.name="First person" 
PersonProgram p2 = new PersonProgram();// Have p2.name="Second person" 

इतने पर ...

आप जानते हैं कि केवल एक ही व्यक्ति है तो आप स्थैतिक वर्ग बना सकते हैं और आपको नई वस्तु बनाने और उदाहरण बनाने के बिना सीधे उपयोग करने की आवश्यकता नहीं है।

तो OOP तुम दोनों विकल्प, एक का चयन जो आप सूट देता है।

0

समझ लें कि Object Oriented Programming के निर्माण के पीछे असली ताकत जोड़ी स्मृति करने के लिए है/संचालन है कि उस पर चलाया जा सकता है के साथ डेटा। तो ओओपी में, ऑब्जेक्ट्स का उद्देश्य अधिकांश डेटा उस डेटा पर सेवाएं प्रदान करने के लिए किया जाता है, जबकि स्थैतिक तरीके मूलभूत प्रक्रियाओं के लिए मूल रूप से होती हैं।

1

संक्षिप्त उत्तर: क्योंकि मुख्य विधि स्थिर है, जिसका अर्थ है कि यह कक्षा से संबंधित है और विशेष वस्तु नहीं है। स्थिर संदर्भ गैर स्थैतिक संदर्भ का संदर्भ नहीं दे सकते हैं क्योंकि किसी विशेष वस्तु का कोई संदर्भ नहीं है।

लेकिन आप अभी भी अपने अन्य चर और तरीकों static के सभी कर सकता है, और वहाँ, समस्या, हल है ना?

नहीं। ऐसा नहीं है।

विस्तृत उत्तर है:

मुख्य विधि static है, क्योंकि अपने आवेदन के कस्टम परिभाषित वस्तुओं में से कोई भी अपने प्रारंभ होने से पहले से मौजूद हैं। आखिरकार, कमरे में मौजूद होने से पहले कमरे में कुछ मौजूद नहीं हो सकता है। JVM को आपके प्रोग्राम में एक प्रविष्टि बिंदु की आवश्यकता है, हालांकि, मुख्य विधि सभी ऑब्जेक्ट संदर्भों से मुक्त होना चाहिए, इसलिए static

जावा आपके आवेदन शुरू होने के साथ PersonProgram.main(args) पर कॉल करता है। अब मान लें कि आपने परिभाषित किया है कि आपके PersonProgram कक्षा में "व्यक्ति" क्या है। शायद PersonProgram का नाम, आयु, इत्यादि है लेकिन आपके पास अभी तक PersonProgram ऑब्जेक्ट्स नहीं हैं, तो main विधि कैसे पता करती है कि यह किस नाम या आयु के साथ काम कर रहा है?

यहां आपके लिए चीजों को स्पष्ट करने का एक तरीका है: Application नामक एक नई कक्षा बनाएं और इसमें केवल अपनी मुख्य विधि डालें। अब, अपने PersonProgram के आवृत्ति चर को संदर्भित करने का प्रयास करें। आप तब तक ऐसा करने में सक्षम नहीं होंगे जब तक आप पहले PersonProgram ऑब्जेक्ट नहीं बनाते।

आपने अभी ओओपी अवधारणाओं को सीखना शुरू कर दिया है, और आपकी कक्षा परिभाषाओं में main विधि डालने का विचार भ्रमित हो सकता है। यह कोड को सीखना आसान बनाता है, लेकिन आपको अपने क्लास तर्क से अलग main विधि को रखने की कोशिश करनी चाहिए क्योंकि आप ओओपी सिद्धांतों को सीखने का प्रयास करते हैं।

+0

इससे बहुत मदद मिली, धन्यवाद। –

0

बेसिक OOP नियम:

एक वर्ग सभी अपने गैर निजी, गैर-स्थिर सदस्यों उपलब्ध केवल अपने instantiated वस्तु के माध्यम से आता है।

यह तब भी लागू होता है जब सदस्यों को एक ही कक्षा से अनुरोध किया जाता है। यद्यपि आप अपनी कक्षा के निजी सदस्यों तक भी पहुंच सकते हैं।

का उपयोग करने के लिए, आपको विधि को स्थिर बनाना होगा।

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