2010-03-03 16 views
5

मेरे पास निम्नलिखित कोड के बारे में दो प्रश्न हैं। 1. सेटटर का उपयोग किए बिना तीसरे कन्स्ट्रक्टर का निर्माण कैसे करें? 2. यह अंतिम कन्स्ट्रक्टर में क्या करता है।"यह()" एक कन्स्ट्रक्टर में क्या करता है?

 
public class Person { 

    private String name; 
    private String address; 

    Person(){} 
    Person(String name){ 
     this.name = name; 
    } 
    Person(String address){ 
     //Person(java.lang.String) is already defined. 
    } 

    Person(String name,String address){ 
     this(); 
     this.name = name; 
     this.address = address; 
    } 
} 

प्रश्न के लिए मेरे समाधान व्यक्ति (वस्तु का पता) { this.address = (स्ट्रिंग) पता है, } हालांकि, मुझे इसके बारे में निश्चित नहीं है।

और मुझे लगता है कि यह(); पिछले निर्माता में निर्माता व्यक्ति() {} कहता है, लेकिन अगर यह होता है, तो इसका मतलब यह है कि दो व्यक्ति ऑब्जेक्ट का निर्माण होगा जब मैं फोन

 
Person p = new Person("myName","myAddress"); 

धन्यवाद है !!!

+0

त्वरित उत्तर के लिए धन्यवाद। मैं वास्तव में एक और पोस्ट पढ़ रहा था और इन दो अनिश्चित प्रश्नों के साथ बाहर आया, इसलिए इस उदाहरण को बनाया। हालांकि, सवाल अब स्पष्ट है, धन्यवाद। – user200340

उत्तर

8

समस्या Person(String name) साथ नहीं बना है और Person(String address) कि आप एक ही मानकों के साथ दो कंस्ट्रक्टर्स नहीं हो सकता है। संकलक पता नहीं होगा जो एक कॉल करने के लिए जब आप कुछ इस तरह कॉल करना चाहते हैं: new Person("Joe Blow");

आप इस के बजाय की तरह कुछ कर सकता है:

Person(String name) 
{ 
    this.name = name; 
} 
Person(String name, String address) 
{ 
    this(name); 
    this.address = address; 
} 

"this()" अपने पिछले निर्माता में सिर्फ इतना है कि कह रहा है ऑब्जेक्ट बनाने की प्रक्रिया के हिस्से के रूप में डिफॉल्ट कन्स्ट्रक्टर को कॉल करने के लिए कन्स्ट्रक्टर। यह दो ऑब्जेक्ट्स नहीं बनाता है, यह सिर्फ डीफ़ में कोड चलाता है। कन्स्ट्रक्टर, जो आपके मामले में कुछ भी नहीं करता है।

+0

अच्छा जवाब। हालांकि, इस के साथ विपरीत तरीका क्यों न जाएं (स्ट्रिंग, "") (मेरा जवाब देखें)? – JasCav

+0

हाँ, यह आपके उत्तर के लिए एक अच्छा बिंदु +1 है। अधिक सामान्य रचनाकारों को अधिक विशिष्ट लोगों को कॉल करें। विधि नामों के लिए –

0

आप अंतिम बयान के बारे में सही हैं, लेकिन दो व्यक्ति वस्तुओं को नहीं बनाया गया है। आंतरिक रूप से, यह एक विधि कॉल की तरह है। मैं समझ नहीं पा रहा हूं कि आप इस कोड के साथ क्या हासिल करने की कोशिश कर रहे हैं। एक निर्माता में अंतिम निर्माता, new Person("1", "2"), या आंतरिक रूप से this("1", "2") का आह्वान करने के लिए। यहां कोई सेटर्स भी नहीं हैं। सेटर्स setName(String), setAddress(String) जैसी विधियां हैं और इसी तरह। गेटर्स String getName(), String getAddress() जैसी विधियां हैं।

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

0
  1. क्षमा सवाल
  2. हाँ, यह() कहता है पहले निर्माता से नहीं समझा गया था। लेकिन चिंता मत करो, दो उदाहरण नहीं बनाए जाएंगे! असल में नया उदाहरण बनाना दो भागों में किया जाता है: स्मृति आवंटन, कन्स्ट्रक्टर को कॉल करना। तो यदि आप आंतरिक रूप से एक और कन्स्ट्रक्टर कहते हैं तो यह केवल उस कोड को निष्पादित करेगा। निर्माता ही सिर्फ एक विशेष विधि है, यह उदाहरण
4

हालांकि कुछ सोचने के लिए कुछ - क्या आप एक व्यक्ति वस्तु बनाना चाहते हैं जिसका नाम या पता नहीं है? यदि आप नहीं करते हैं, तो उन रचनाकारों की पेशकश क्यों करें (ऐसा नहीं कि आप वैसे भी कर सकते हैं - उनके पास समान पैरामीटर हैं, इसलिए संकलक उन्हें अलग नहीं कर सकता)? मुझे लगता है कि हर व्यक्ति का नाम होगा। शायद किसी के पास कोई पता नहीं होगा।

अपने रचनाकार बनाने से पहले अपनी वस्तु के बारे में सोचें।

एक और संभावना है:

public class Person { 

    private String name; 
    private String address; 

    Person(String name) { 
     this(name, ""); 
    } 

    Person(String name, String address) { 
     this.name = name; 
     this.address = address; 

     // TODO - Other initializations. 
    } 
} 
0

इस व्यक्ति(), लेकिन दो वस्तुओं नहीं बनाई गई हैं कहते हैं।

1

कारखाना उपयोग तरीकों इस वस्तु के निर्माण के लिए

public class Person { 

    private String name; 
    private String address; 

    public Person(String name, String address) { 
     this.name = name; 
     this.address = address; 
    } 

    public static Person createHomelessPerson (String name) 
    { 
     return new Person(name, null); 
    } 

    public static Person createNamelessPerson (String address) 
    { 
     return new Person(null, address); 
    } 
} 
+0

+1! : डी –

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