जावा में कंस्ट्रक्टर चेनिंग बस एक निर्माता द्वारा दूसरे निर्माता को कॉल करने का कार्य है विरासत. यह तब होता है जब एक उप-वर्ग का निर्माण किया जाता है: इसका पहला कार्य अपने माता-पिता की निर्माण विधि को कॉल करना है। लेकिन प्रोग्रामर किसी अन्य कंस्ट्रक्टर को भी कीवर्ड का उपयोग करके स्पष्ट रूप से कॉल कर सकते हैं इस() या उत्तम(). इस() कीवर्ड दूसरा कॉल करता है ओवरलोडेड निर्माणकर्ता समान कक्षा में; उत्तम() सुपरक्लॉस में कीवर्ड नॉन-डिफॉल्ट कंस्ट्रक्टर को कॉल करता है।
अव्यवस्थित निर्माणकर्ता जंजीर
कंस्ट्रक्टर चेनिंग वंशानुक्रम के उपयोग के माध्यम से होता है। सबक्लास कंस्ट्रक्टर विधि का पहला कार्य अपने सुपरक्लास कंस्ट्रक्टर विधि को कॉल करना है। यह सुनिश्चित करता है कि उपवर्ग वस्तु का निर्माण वंशानुक्रम श्रृंखला में इसके ऊपर की कक्षाओं के आरंभ से शुरू होता है।
वंशानुक्रम श्रृंखला में किसी भी संख्या में कक्षाएं हो सकती हैं। प्रत्येक कंस्ट्रक्टर विधि श्रृंखला को तब तक कॉल करती है जब तक कि शीर्ष पर कक्षा तक पहुंच और आरंभ नहीं हो जाती। फिर नीचे की प्रत्येक बाद वाली कक्षा को आरम्भ किया जाता है क्योंकि श्रृंखला हवाएँ मूल उपवर्ग में वापस आती हैं। इस प्रक्रिया को कंस्ट्रक्टर चेनिंग कहा जाता है।
ध्यान दें कि:
- सुपरक्लास के लिए यह निहित कॉल वैसा ही है जैसे कि उपवर्ग में शामिल किया गया था उत्तम() कीवर्ड, अर्थात् उत्तम() यहाँ निहित है।
- यदि कोई नो-आर्ग कंस्ट्रक्टर क्लास में शामिल नहीं होता है, तो जावा पर्दे के पीछे से एक बनाता है और इसे इनवाइट करता है। इसका मतलब यह है कि यदि आपका एकमात्र निर्माता तर्क लेता है, तो आपको अवश्य करना चाहिए स्पष्ट रूप से का उपयोग इस() या उत्तम() कीवर्ड इसे लागू करने के लिए (नीचे देखें)।
स्तनपायी द्वारा विस्तारित इस सुपरक्लास पशु पर विचार करें:
कक्षा पशु {
// कंस्ट्रक्टर
जानवर(){
System.out.println ("हम क्लास एनिमल कंस्ट्रक्टर में हैं।");
}
}
वर्ग स्तनपायी जानवर का विस्तार {
//constructor
सस्तन प्राणी(){
System.out.println ("हम क्लास मैमल्स कंस्ट्रक्टर में हैं।");
}
}
अब, हम वर्ग स्तनपायी को तुरंत बताएं:
सार्वजनिक वर्ग ChainingConstructors {
/**
* @ अपरम अर्ग
*/
सार्वजनिक स्थैतिक शून्य main (String [] args) {
स्तनपायी m = नया स्तनपायी ();
}
}
जब उपरोक्त कार्यक्रम चलता है, तब जावा सुपरक्लास एनिमल कंस्ट्रक्टर को कॉल करता है, फिर क्लास के कंस्ट्रक्टर को। इसलिए, आउटपुट होगा:
हम क्लास एनिमल के कंस्ट्रक्टर में हैं
हम क्लास मैमल्स के कंस्ट्रक्टर में हैं
() या सुपर () का उपयोग करते हुए स्पष्ट कंस्ट्रक्टर चेनिंग
का स्पष्ट उपयोग इस() या उत्तम() कीवर्ड आपको एक गैर-डिफ़ॉल्ट निर्माता को कॉल करने की अनुमति देता है।
- नॉन-आर्ग्स डिफॉल्ट कंस्ट्रक्टर या एक ही क्लास के भीतर से ओवरलोडेड कंस्ट्रक्टर को कॉल करने के लिए, का उपयोग करें इस() कीवर्ड।
- उप-वर्ग से गैर-डिफ़ॉल्ट सुपरक्लास कंस्ट्रक्टर को कॉल करने के लिए, का उपयोग करें उत्तम() कीवर्ड। उदाहरण के लिए, यदि सुपरक्लास में कई कंस्ट्रक्टर हैं, तो एक उपवर्ग हमेशा डिफॉल्ट के बजाय एक विशिष्ट कंस्ट्रक्टर को कॉल करना चाह सकता है।
ध्यान दें कि किसी अन्य कंस्ट्रक्टर को कॉल करना कंस्ट्रक्टर में पहला स्टेटमेंट होना चाहिए या जावा एक संकलन त्रुटि को फेंक देगा।
नीचे दिए गए कोड पर विचार करें जिसमें एक नया उपवर्ग, कार्निवोर, जो स्तनपायी वर्ग से विरासत में मिला है, जो कि पशु वर्ग से विरासत में मिला है, और प्रत्येक वर्ग के पास अब एक तर्क है कि एक तर्क है।
यहां देखें सुपरक्लास एनिमल:
सार्वजनिक वर्ग पशुध्यान दें कि कंस्ट्रक्टर अब एक लेता है नाम प्रकार का तार एक पैरामीटर के रूप में और यह कि कक्षा का शरीर कहता है इस() कंस्ट्रक्टर पर। के स्पष्ट उपयोग के बिना यह नाम, जावा एक डिफ़ॉल्ट, नो-आर्ग्स कंस्ट्रक्टर का निर्माण करेगा और इसके बजाय इसे लागू करेगा।
निजी स्ट्रिंग नाम;
सार्वजनिक पशु (स्ट्रिंग नाम) // एक तर्क के साथ निर्माता
{
this.name = नाम;
System.out.println ("मुझे पहले निष्पादित किया गया है");
}
}
यहाँ उपवर्ग स्तनपायी है:
सार्वजनिक वर्ग स्तनपायी जानवर का विस्तार
सार्वजनिक स्तनपायी (स्ट्रिंग नाम)
{
सुपर (नाम);
System.out.println ("मैं दूसरा निष्पादित किया गया");
}
}
इसका निर्माता भी एक तर्क लेता है, और इसका उपयोग करता है सुपर (नाम) अपने सुपरक्लास में एक विशिष्ट निर्माता को आमंत्रित करना।
यहाँ एक और उपवर्ग कार्निवोर है। यह स्तनपायी से विरासत में मिला:
सार्वजनिक वर्ग कार्निवोर का विस्तार स्तनपायी {
सार्वजनिक कार्निवोर (स्ट्रिंग नाम)
{
सुपर (नाम);
System.out.println ("मैं अंतिम बार निष्पादित हूं");
}
}
जब चलाते हैं, तो ये तीन कोड ब्लॉक प्रिंट करेंगे:
मुझे पहले मार दिया गया।
मैं दूसरी वारदात को अंजाम देता हूं।
मैं अंतिम निष्पादित हूं।
संक्षेप में दुहराना: जब कार्निवोर वर्ग का एक उदाहरण बनाया जाता है, तो इसके निर्माण विधि की पहली क्रिया स्तनपायी रचनाकार विधि को कॉल करना है। इसी तरह, मम्मल कंस्ट्रक्टर विधि की पहली क्रिया एनिमल कंस्ट्रक्टर विधि को कॉल करना है। कंस्ट्रक्टर विधि कॉल की एक श्रृंखला यह सुनिश्चित करती है कि कार्निवोर ऑब्जेक्ट के उदाहरण ने अपनी वंशानुक्रम श्रृंखला में सभी वर्गों को ठीक से प्रारंभ किया है।