सार कक्षाओं और इंटरफेस का उपयोग करने का मुख्य कारण अलग-अलग हैं।
एक सार वर्ग का उपयोग तब किया जाना चाहिए जब आपके पास कक्षाओं के समूह के समान कार्यान्वयन होते हैं, लेकिन कुछ में भिन्न होते हैं।
यह एक बुरा उदाहरण हो सकता है, लेकिन जावा ढांचे में अमूर्त वर्गों का सबसे स्पष्ट उपयोग java.io कक्षाओं के भीतर है। OutputStream
बाइट्स की एक धारा है। जहां वह धारा पूरी तरह से निर्भर करती है, उस पर निर्भर करता है कि OutputStream
के उप-वर्ग पर आप उपयोग कर रहे हैं ... FileOutputStream
, PipedOutputStream
, java.net.Socket
की getOutputStream
विधि से निर्मित आउटपुट स्ट्रीम ...
नोट: java.io अन्य धाराओं/पाठकों/लेखकों में धाराओं को लपेटने के लिए सजावटी पैटर्न का भी उपयोग करता है।
एक इंटरफ़ेस का उपयोग तब किया जाना चाहिए जब आप केवल यह गारंटी देना चाहते हैं कि एक वर्ग विधियों का एक सेट लागू करता है, लेकिन आपको परवाह नहीं है।
इंटरफेस का सबसे स्पष्ट उपयोग संग्रह ढांचे के भीतर है।
मुझे परवाह नहीं है एक List
कैसे कहते हैं /, तत्वों को हटा इतने लंबे समय के रूप में मैं डाल दिया और तत्वों पाने के लिए add(something)
और get(0)
कॉल कर सकते हैं। यह एक सरणी (ArrayList
, CopyOnWriteArrayList
), लिंक्ड सूची (LinkedList
), आदि ... का उपयोग कर सकते
अन्य लाभ इंटरफेस का उपयोग करने में है कि एक वर्ग एक से अधिक को लागू कर सकते हैं। LinkedList
List
औरDeque
दोनों का कार्यान्वयन है।
मुझे लगता है कि आपको इसमें भी कारक बनाना चाहिए - पुन: उपयोग के मामले में एक महत्वपूर्ण अवधारणा है - http://www.artima.com/designtechniques/compoinh.html – Jon