तुलना चार्ट
तुलना के लिए आधार | इंटरफेस | सार वर्ग |
---|---|---|
बुनियादी | जब आपको केवल इसके कार्यान्वयन के बारे में आवश्यकताओं का ज्ञान नहीं होता है, तो आप "इंटरफ़ेस" का उपयोग करते हैं। | जब आप आंशिक रूप से कार्यान्वयन के बारे में जानते हैं तो आप "एब्सट्रैक्ट क्लासेस" का उपयोग करते हैं। |
तरीके | इंटरफ़ेस में केवल सार विधियाँ हैं। | अमूर्त वर्ग में अमूर्त विधियों के साथ-साथ ठोस विधियां भी शामिल हैं। |
विधियों का उपयोग संशोधक | इंटरफ़ेस के तरीके हमेशा "सार्वजनिक" और "सार" होते हैं, भले ही हम घोषणा न करें। इसलिए, इसे 100%, शुद्ध अमूर्त वर्ग कहा जा सकता है। | यह अनिवार्य नहीं है कि अमूर्त वर्ग में विधि सार्वजनिक और अमूर्त होगी। इसके ठोस तरीके भी हो सकते हैं। |
विधियों के लिए प्रतिबंधित संशोधक | एक इंटरफ़ेस विधि को निम्न संशोधक के साथ घोषित नहीं किया जा सकता है: सार्वजनिक: निजी और संरक्षित सार: अंतिम, स्थिर, सिंक्रनाइज़, देशी, सख्त। | अमूर्त वर्ग चर के संशोधक पर कोई प्रतिबंध नहीं है। |
चर की पहुंच संशोधक | इंटरफ़ेस चर के लिए अनुमत अतिरिक्त मोडिफ़ायर सार्वजनिक, स्थिर और अंतिम हैं चाहे हम घोषित कर रहे हैं या नहीं। | अमूर्त वर्ग में चर सार्वजनिक, स्थिर, अंतिम नहीं होना चाहिए। |
चर के लिए प्रतिबंधित संशोधक | इंटरफ़ेस चर को निजी, संरक्षित, क्षणिक, अस्थिर के रूप में घोषित नहीं किया जा सकता है। | अमूर्त वर्ग चर के संशोधक पर कोई प्रतिबंध नहीं है। |
चरों का प्रारंभ | इंटरफ़ेस चर को इसकी घोषणा के समय आरंभीकृत किया जाना चाहिए। | यह अनिवार्य नहीं है कि इसकी घोषणा के समय अमूर्त वर्ग चर को आरंभ किया जाना चाहिए। |
उदाहरण और स्थिर ब्लॉक | इंटरफ़ेस के अंदर, आप एक उदाहरण या स्थिर ब्लॉक की घोषणा नहीं कर सकते। | अमूर्त वर्ग इसके अंदर एक उदाहरण या स्थिर ब्लॉक की अनुमति देता है। |
कंस्ट्रक्टर्स | आप इंटरफ़ेस के अंदर कंस्ट्रक्टर घोषित नहीं कर सकते। | आप एक अमूर्त वर्ग के अंदर निर्माता की घोषणा कर सकते हैं। |
इंटरफ़ेस की परिभाषा
जावा एकाधिक वंशानुक्रम की अनुमति नहीं देता है। यही है, एक एकल वर्ग एक समय में एक से अधिक वर्ग नहीं ले सकता है। इसके पीछे के कारण को एक उदाहरण से समझाया जा सकता है। मान लें कि हमारे पास दो अभिभावक वर्ग हैं, ए और बी और एक व्युत्पन्न वर्ग सी। व्युत्पन्न वर्ग सी दोनों वर्गों ए और बी को विरासत में मिला है। अब, कक्षा ए और बी दोनों में विधि सेट () है, तो यह एक प्रश्न होगा। कक्षा C के लिए कि किस वर्ग के सेट () विधि में यह वारिस होना चाहिए। इस समस्या का हल "इंटरफ़ेस" है।
access_specifier इंटरफ़ेस इंटरफ़ेस_name {वापसी-प्रकार विधि-name1 (पैरामीटर-सूची); वापसी प्रकार विधि-name2 (पैरामीटर-सूची); प्रकार अंतिम-varname1 = मान; प्रकार अंतिम-varname2 = मान; // ... रिटर्न-टाइप मेथड-नेम (पैरामीटर-लिस्ट); प्रकार अंतिम-varnameN = मान; }
एक्सेस स्पेसियर को सार्वजनिक घोषित किया जाता है क्योंकि वर्गों को इंटरफ़ेस को लागू करने की आवश्यकता होती है।
C ++ में "इंटरफ़ेस" की अवधारणा हमारे पास नहीं है। लेकिन, Java और C # इंटरफ़ेस को बहुत अच्छी तरह से परिभाषित करते हैं।
जावा में इंटरफ़ेस:
- एक अंतरफलक के चर डिफ़ॉल्ट रूप से हमेशा सार्वजनिक, स्थिर और अंतिम होते हैं।
- इसकी घोषणा के समय चर को आरंभ किया जाना चाहिए।
- चर को कभी भी निजी, संरक्षित, क्षणिक और अस्थिर नहीं घोषित किया जा सकता है।
- एक इंटरफ़ेस के तरीके हमेशा सार्वजनिक और सार होते हैं, जबकि, उन्हें कभी भी निजी, संरक्षित, अंतिम, स्थिर, सिंक्रनाइज़, देशी और सख्त के रूप में घोषित नहीं किया जा सकता है।
- आप किसी भी कंस्ट्रक्टर को इंटरफ़ेस के अंदर घोषित नहीं कर सकते क्योंकि कंस्ट्रक्टर का मुख्य उद्देश्य क्लास वेरिएबल्स का इनिशियलाइज़ेशन है लेकिन, इंटरफ़ेस वेरिएबल्स को इसके डिक्लेरेशन के समय इनिशियलाइज़ किया जाता है।
- इंटरफ़ेस अन्य इंटरफेस को इनहेरिट कर सकता है लेकिन, इस तरह के इंटरफ़ेस को लागू करने वाले वर्ग को सभी विरासत वाले इंटरफेस के तरीकों को लागू करना चाहिए।
- एक वर्ग एक समय में एक से अधिक इंटरफ़ेस इनहेरिट कर सकता है, और इसे सभी अंतर्निहित इंटरफ़ेस के सभी तरीकों को लागू करना होगा।
जावा में इंटरफ़ेस लागू करने का सामान्य रूप:
class class_name औजार इंटरफ़ेस_name {// class-body}
इंटरफ़ेस को इनहेरिट करने के लिए, एक क्लास एक कीवर्ड "इम्प्लीमेंट्स" का उपयोग करता है, और क्लास एक इनहेरिट इंटरफ़ेस द्वारा घोषित सभी विधि को लागू करता है।
C # में इंटरफ़ेस:
जावा में इंटरफ़ेस में C # के इंटरफ़ेस लगभग समान हैं:
- C # में इंटरफ़ेस चर घोषित नहीं करता है।
- इंटरफ़ेस का नाम एक पूँजी I के साथ उपसर्ग है और एक बृहदान्त्र (:) चिन्ह के साथ विरासत में मिला है।
C # में इंटरफ़ेस लागू करने का सामान्य रूप:
class class_name: इंटरफ़ेस_name {// class-body}
सार वर्ग की परिभाषा
एक वर्ग जिसमें एक या एक से अधिक अमूर्त विधियाँ होती हैं, उसे अमूर्त वर्ग कहा जाता है, और एक वर्ग को "अमूर्त" शब्द के प्रयोग से सार के रूप में घोषित किया जाता है, जो कक्षा की घोषणा की शुरुआत में "वर्ग" कीवर्ड से पहले होता है। जैसा कि अमूर्त वर्ग में अमूर्त विधि शामिल है, यह एक अपूर्ण प्रकार का गठन करता है। इसलिए, आप एक अमूर्त वर्ग की वस्तुएँ नहीं बना सकते। जब भी कोई वर्ग एक अमूर्त वर्ग को प्राप्त करता है, तो उसे अमूर्त वर्ग के सभी अमूर्त तरीकों को लागू करना होगा अगर ऐसा नहीं होता है तो उसे भी सार के रूप में घोषित किया जाना चाहिए। सार विशेषता तब तक विरासत में मिलती है जब तक कि अमूर्त विधियों का पूर्ण कार्यान्वयन नहीं हो जाता है।
अमूर्त वर्ग में ठोस विधियाँ भी हो सकती हैं जिनका उपयोग व्युत्पन्न वर्ग द्वारा किया जा सकता है। लेकिन, आप अमूर्त वर्ग के अंदर एक अमूर्त रचनाकार या अमूर्त स्थिर विधि की घोषणा नहीं कर सकते। जावा में सार वर्ग का सामान्य रूप निम्नानुसार है:
अमूर्त वर्ग class_name {अमूर्त method_name1 (); अमूर्त method_name2 (); : return_type method_name3 (पैरामीटर_लिस्ट) {// ठोस विधि} return_type method_name4 (पैरामीटर_लिस्ट) {// ठोस विधि}};
अमूर्त वर्ग की अवधारणा जावा और C # दोनों में समान है। C ++ में एक अमूर्त वर्ग थोड़ा अलग है।
C ++ में अगर एक क्लास में कम से कम एक वर्चुअल फंक्शन होता है तो क्लास एक अमूर्त क्लास बन जाती है। "अमूर्त" कीवर्ड के बजाय, कीवर्ड "वर्चुअल" का उपयोग अमूर्त पद्धति को घोषित करने के लिए किया जाता है।
जावा और सी # में इंटरफ़ेस और सार वर्ग के बीच महत्वपूर्ण अंतर
- जब आपको "क्या आवश्यक है" का ज्ञान है, लेकिन "इसे कैसे लागू किया जाएगा" का नहीं तो इंटरफ़ेस का उपयोग किया जाना चाहिए। दूसरी ओर, यदि आप जानते हैं कि क्या आवश्यक है और आंशिक रूप से पता है कि इसे कैसे लागू किया जाएगा तो एक अमूर्त वर्ग का उपयोग करें।
- एक इंटरफ़ेस की अपनी सभी विधियाँ अमूर्त हैं लेकिन, एक अमूर्त वर्ग में कुछ अमूर्त विधियाँ और कुछ ठोस विधियाँ हैं।
- एक इंटरफ़ेस के अंदर के तरीके सार्वजनिक और सार हैं इसलिए, इसे एक शुद्ध सार वर्ग भी कहा जाता है। दूसरी ओर, एक अमूर्त के अंदर के तरीके केवल सार्वजनिक और अमूर्त होने तक ही सीमित नहीं हैं।
- एक इंटरफ़ेस विधि कभी भी निजी, संरक्षित, अंतिम, स्थिर, सिंक्रनाइज़, मूल या सख्त नहीं हो सकती है। दूसरी ओर, एक अमूर्त वर्ग के तरीकों पर कोई प्रतिबंध नहीं है।
- एक इंटरफ़ेस में चर सार्वजनिक और अंतिम होते हैं चाहे हम उन्हें घोषित करते हैं या नहीं, जबकि, एक अमूर्त वर्ग के चर के लिए ऐसा कोई प्रतिबंध नहीं है जो केवल सार्वजनिक और अंतिम हो।
- एक अंतरफलक में चर कभी भी निजी संरक्षित क्षणिक या अस्थिर नहीं हो सकते हैं, जबकि एक अमूर्त वर्ग में चर के लिए कोई प्रतिबंध नहीं है।
- घोषणा के दौरान एक इंटरफ़ेस के चर को आरंभीकृत किया जाना चाहिए। दूसरी ओर, एक अमूर्त वर्ग में चर किसी भी समय आरंभ किया जा सकता है।
- एक इंटरफ़ेस के अंदर, एक इंस्टेंस या स्टैटिक ब्लॉक को घोषित नहीं किया जा सकता है, लेकिन आप एक अमूर्त वर्ग के अंदर इंस्टेंस या स्टैटिक ब्लॉक की घोषणा कर सकते हैं।
- आप एक इंटरफ़ेस के अंदर कंस्ट्रक्टर को परिभाषित नहीं कर सकते हैं, जबकि आप एक अमूर्त वर्ग के अंदर कंस्ट्रक्टर को परिभाषित कर सकते हैं।
निष्कर्ष:
जब आपको एक आधार वर्ग बनाने की आवश्यकता होती है, जिसमें सामान्यीकृत रूप विधियाँ होती हैं जिन्हें उनकी आवश्यकता के अनुसार व्युत्पन्न वर्गों द्वारा कार्यान्वित किया जा सकता है, इंटरफ़ेस और अमूर्त वर्ग की अवधारणा ऐसा करने में मदद करती है।