मुख्य कारण यह है कि आप ऐसा करेंगे कि इंटरफ़ेस के विशिष्ट कार्यान्वयन से आपके कोड को डीक्यूपल करना है। जब आप इस तरह अपने कोड लिखने:
List list = new ArrayList();
अपने कोड के बाकी केवल जानता है कि डेटा प्रकार List
है, जो बेहतर है क्योंकि यह आप आसानी से List
इंटरफेस के विभिन्न कार्यान्वयन के बीच स्विच करने की अनुमति देता है की है।
उदाहरण के लिए, कहें कि आप काफी बड़ी तृतीय पक्ष लाइब्रेरी लिख रहे थे, और कहें कि आपने LinkedList
के साथ अपनी लाइब्रेरी के मूल को लागू करने का निर्णय लिया है।यदि आपकी लाइब्रेरी इन सूचियों में तत्वों तक पहुंचने पर भारी निर्भर करती है, तो अंत में आप पाएंगे कि आपने खराब डिजाइन निर्णय लिया है; आपको एहसास होगा कि आपको (जो ओ (1) एक्सेस टाइम देता है) LinkedList
(जो ओ (एन) एक्सेस समय देता है) के बजाय उपयोग करना चाहिए था। मान लीजिए कि आप एक इंटरफ़ेस में प्रोग्रामिंग कर रहे हैं, ऐसा परिवर्तन करना आसान है। आप बस List
से के कहने बदल जाएगा,
List list = new LinkedList();
को
List list = new ArrayList();
और आप जानते हैं कि इस वजह से आप अपने कोड लिखा है List
इंटरफ़ेस द्वारा प्रदान की अनुबंध का पालन करने के लिए काम करेंगे।
दूसरी ओर, यदि आप को लागू किया, LinkedList list = new LinkedList()
का उपयोग कर इस तरह के एक परिवर्तन करने से अपनी लाइब्रेरी का कोर के रूप में आसान नहीं होगा, के रूप में कोई गारंटी नहीं कि अपने कोड के बाकी तरीकों का उपयोग नहीं कर सकता है LinkedList
कक्षा के लिए विशिष्ट।
सब कुछ, पसंद केवल डिजाइन की बात है ... लेकिन इस तरह का डिज़ाइन बहुत महत्वपूर्ण है (विशेष रूप से बड़ी परियोजनाओं पर काम करते समय), क्योंकि यह आपको बिना किसी ब्रेक के कार्यान्वयन-विशिष्ट परिवर्तन करने की अनुमति देगा मौजूदा कोड
स्रोत
2012-03-24 15:57:47
ओह। मुझे माफ कर दो। क्योंकि मैं 'ऑब्जेक्ट' में बदल जाता हूं, इसलिए मैं इसे भूल जाता हूं। – hqt
@ डफिमो - वह सवाल पूछ रहा है कि क्यों नई सूची () 'काम नहीं करती है। यह एक बिल्कुल अलग सवाल है। –
यह एक डुप्लिकेट प्रश्न नहीं है। संभावित डुप्लिकेट में सामान्य प्रश्न है लेकिन एक विशिष्ट विवरण है। मुझे यह प्रश्न शीर्षक में अधिक प्रासंगिक/वास्तव में पूछे जाने वाले सिंक में मिलता है। – Dexters