एक अमूर्त वर्ग प्रयोग करें यदि आप आप चाहते हैं कि यह करने के लिए उपवर्गों है कुछ कार्यक्षमता है। उदाहरण के लिए, यदि आपके पास फ़ंक्शंस का एक सेट है जिसे आप सभी मूल सार वर्ग के उप-वर्गों के पास चाहते हैं।
यदि आप व्यवहार/कार्यक्षमता पर सामान्य अनुबंध चाहते हैं तो एक इंटरफ़ेस का उपयोग करें। यदि आपके पास कोई फ़ंक्शन या ऑब्जेक्ट है जिसे आप विभिन्न ऑब्जेक्ट्स के सेट में लेना चाहते हैं, तो इंटरफ़ेस का उपयोग करें। फिर आप जिस ऑब्जेक्ट को ले रहे हैं उसे बदलने के बिना, उस ऑब्जेक्ट को बदल सकते हैं, जिसमें पारित किया गया है।
सार कक्षाओं की तुलना में इंटरफेस आमतौर पर ढीले होते हैं। आप ऐसी स्थिति में इंटरफेस का उपयोग नहीं करना चाहेंगे जहां आप लगातार इंटरफ़ेस के सभी तरीकों के लिए एक ही कोड लिख रहे हों। एक अमूर्त वर्ग का प्रयोग करें और एक बार प्रत्येक विधि को परिभाषित करें।
इसके अलावा, यदि आप एक विशिष्ट ऑब्जेक्ट विरासत पदानुक्रम बनाने की कोशिश कर रहे हैं, तो आप वास्तव में केवल इंटरफेस के साथ ऐसा करने की कोशिश नहीं करना चाहेंगे।
इसके अलावा, फिर भी, कुछ भाषाओं में आप केवल एक ही बेस क्लास प्राप्त कर सकते हैं, और यदि किसी ऑब्जेक्ट में पहले से ही बेस क्लास है, तो आपको एक सार बेस क्लास का उपयोग करने के लिए कुछ रिफैक्टरिंग करना होगा। इसका अर्थ हो सकता है या नहीं हो सकता है कि आप इसके बजाय एक इंटीफेस का उपयोग करना चाहें।
@tvanfosson नोट्स के रूप में, कई इंटरफेस का उपयोग करना बुरा विचार नहीं है, जब आप वास्तव में सार कक्षाओं और इंटरफेस को समझते हैं, तो यह वास्तव में एक या/स्थिति नहीं है। एक विशेष स्थिति अमूर्त वर्गों और इंटरफेस या न तो दोनों का उपयोग कर सकती है। मैं इंटरफेस का उपयोग कभी-कभी बस प्रतिबंधित करने के लिए करता हूं कि एक विधि या ऑब्जेक्ट पास पैरामीटर ऑब्जेक्ट पर किस प्रकार पहुंच सकता है।
स्रोत
2009-02-17 18:34:35
डुप्ले: http://stackoverflow.com/questions/56867/interface-vs-base-class – juan
यह थोड़ा अलग है क्योंकि यह सभी मूल वर्गों के बजाय अमूर्त आधार वर्गों का जिक्र कर रहा है। –
मैं डुप्लिकेट लिंक हटा दूंगा, लेकिन मेरे पास उस स्तर का उपयोग –