अमूर्त वर्ग और इंटरफ़ेस के बीच अंतर Java
अमूर्त वर्ग और इंटरफ़ेस के बीच मुख्य अंतर Java
- इंटरफ़ेस में, एक क्लास कई इंटरफ़ेस को कार्यान्वित कर सकता है, जबकि क्लास केवल एक ही एब्सट्रैक्ट क्लास को इनहेरिट कर सकता है।
- इंटरफ़ेस में एक्सेस मॉडिफ़ायर नहीं होते हैं। इंटरफ़ेस के अंदर परिभाषित हर चीज़ में पब्लिक मॉडिफ़ायर माना जाता है, जबकि एब्सट्रैक्ट क्लास में एक्सेस मॉडिफ़ायर हो सकता है।
- इंटरफ़ेस में डेटा फ़ील्ड नहीं हो सकते, जबकि अमूर्त वर्ग में डेटा फ़ील्ड हो सकते हैं।
- इंटरफेस किसी वर्ग की परिधीय क्षमताओं को परिभाषित करने में मदद करते हैं, जबकि अमूर्त वर्ग किसी वर्ग की पहचान को परिभाषित करता है।
अमूर्त वर्ग (एब्सट्रैक्ट क्लास) क्या है?
जिस क्लास की घोषणा में एब्सट्रैक्ट कीवर्ड होता है, उसे एब्सट्रैक्ट क्लास कहते हैं। एब्सट्रैक्ट क्लास में शून्य या उससे ज़्यादा एब्सट्रैक्ट मेथड होने चाहिए। यानी, बिना बॉडी वाली मेथड। इसमें कई ठोस मेथड हो सकते हैं। एब्सट्रैक्ट क्लास आपको ठोस क्लास के लिए ब्लूप्रिंट बनाने की अनुमति देते हैं। लेकिन इनहेरिट करने वाले क्लास को एब्सट्रैक्ट मेथड को लागू करना चाहिए। एब्सट्रैक्ट क्लास को इंस्टेंटिएट नहीं किया जा सकता।
इंटरफेस का उपयोग करने के महत्वपूर्ण कारण
- प्राप्त करने के लिए इंटरफ़ेस का उपयोग किया जाता है मतिहीनता.
- रन टाइम पर गतिशील विधि समाधान का समर्थन करने के लिए डिज़ाइन किया गया
- यह आपको ढीला युग्मन प्राप्त करने में मदद करता है।
- आपको किसी विधि की परिभाषा को वंशानुक्रम पदानुक्रम से अलग करने की अनुमति देता है
एब्स्ट्रैक्ट क्लास का उपयोग करने के महत्वपूर्ण कारण
- अमूर्त वर्ग उपवर्गों के लिए डिफ़ॉल्ट कार्यक्षमता प्रदान करते हैं।
- भविष्य की विशिष्ट कक्षाओं के लिए एक टेम्पलेट प्रदान करता है
- आपको इसके उपवर्गों के लिए एक सामान्य इंटरफ़ेस परिभाषित करने में मदद करता है
- अमूर्त वर्ग कोड को पुनः प्रयोज्यता प्रदान करता है।
इंटरफ़ेस क्या है?
इंटरफ़ेस एक ब्लूप्रिंट है जिसका उपयोग किसी क्लास को लागू करने के लिए किया जा सकता है। इंटरफ़ेस में कोई ठोस विधियाँ (ऐसी विधियाँ जिनमें कोड होता है) नहीं होती हैं। इंटरफ़ेस की सभी विधियाँ अमूर्त विधियाँ होती हैं। इंटरफ़ेस को इंस्टेंटिएट नहीं किया जा सकता। हालाँकि, इंटरफ़ेस को लागू करने वाली कक्षाओं को इंस्टेंटिएट किया जा सकता है। इंटरफ़ेस में कभी भी इंस्टेंस वैरिएबल नहीं होते हैं, लेकिन उनमें पब्लिक स्टैटिक फ़ाइनल वैरिएबल (यानी, स्थिर क्लास वैरिएबल) हो सकते हैं
इंटरफ़ेस और एब्सट्रैक्ट क्लास के बीच अंतर Java
एक अमूर्त वर्ग आपको ऐसी कार्यक्षमता बनाने की अनुमति देता है जिसे उपवर्ग लागू या ओवरराइड कर सकते हैं जबकि एक इंटरफ़ेस आपको केवल कार्यक्षमता बताने की अनुमति देता है लेकिन इसे लागू करने की नहीं। एक वर्ग केवल एक अमूर्त वर्ग का विस्तार कर सकता है जबकि एक वर्ग कई इंटरफ़ेस को लागू कर सकता है।
पैरामीटर्स | इंटरफेस | सार वर्ग |
---|---|---|
गति | धीरे | तेज |
एकाधिक वंशानुक्रम | कई इंटरफेस लागू करें | केवल एक अमूर्त वर्ग |
संरचना | अमूर्त विधियाँ | अमूर्त एवं ठोस विधियाँ |
कब इस्तेमाल करें | भविष्य के विस्तार के बारे मे | स्वतंत्रता से बचने के लिए |
उत्तराधिकार/ कार्यान्वयन | एक क्लास कई इंटरफेस को लागू कर सकता है | क्लास केवल एक ही एब्सट्रैक्ट क्लास को इनहेरिट कर सकता है |
डिफ़ॉल्ट कार्यान्वयन | इंटरफ़ेस में नई सामग्री जोड़ते समय, सभी कार्यान्वयनकर्ताओं को ढूंढना और नई परिभाषित सामग्री को कार्यान्वित करना एक दुःस्वप्न जैसा होता है। | एब्स्ट्रैक्ट क्लास के मामले में, आप डिफ़ॉल्ट कार्यान्वयन का लाभ उठा सकते हैं। |
एक्सेस संशोधक | इंटरफ़ेस में एक्सेस संशोधक नहीं हैं। इंटरफ़ेस के अंदर परिभाषित हर चीज़ को सार्वजनिक संशोधक माना जाता है। | एब्स्ट्रैक्ट क्लास में एक्सेस संशोधक हो सकता है। |
कब इस्तेमाल करें | जब विभिन्न कार्यान्वयन केवल विधि हस्ताक्षर साझा करते हैं तो इंटरफ़ेस का उपयोग करना बेहतर होता है। मूल्य प्रकारों का बहुरूपी पदानुक्रम। | इसका प्रयोग तब किया जाना चाहिए जब एक ही प्रकार के विभिन्न कार्यान्वयन एक समान व्यवहार साझा करते हों। |
डेटा फ़ील्ड | इंटरफ़ेस में डेटा फ़ील्ड नहीं हो सकते. | क्लास में डेटा फ़ील्ड हो सकते हैं. |
एकाधिक विरासत डिफ़ॉल्ट | एक क्लास अनेक इंटरफेस क्रियान्वित कर सकता है। | एक वर्ग केवल एक ही अमूर्त वर्ग को विरासत में प्राप्त करता है। |
कार्यान्वयन | इंटरफ़ेस अमूर्त होता है, इसलिए यह कोई कोड प्रदान नहीं कर सकता। | एक अमूर्त वर्ग पूर्ण, डिफ़ॉल्ट कोड दे सकता है जिसे ओवरराइड किया जाना चाहिए। |
एक्सेस संशोधक का उपयोग | आप विधि, गुण आदि के लिए एक्सेस संशोधक का उपयोग नहीं कर सकते। | आप एक अमूर्त वर्ग का उपयोग कर सकते हैं जिसमें एक्सेस संशोधक शामिल हों। |
प्रयोग | इंटरफेस किसी वर्ग की परिधीय क्षमताओं को परिभाषित करने में मदद करते हैं। | एक अमूर्त वर्ग एक वर्ग की पहचान को परिभाषित करता है। |
परिभाषित क्षेत्र | कोई फ़ील्ड परिभाषित नहीं किया जा सकता | एक अमूर्त वर्ग आपको फ़ील्ड और स्थिरांक दोनों को परिभाषित करने की अनुमति देता है |
विरासत | एक इंटरफ़ेस अनेक इंटरफ़ेस को इनहेरिट कर सकता है, लेकिन एक क्लास को इनहेरिट नहीं कर सकता। | एक अमूर्त वर्ग एक वर्ग और एकाधिक इंटरफेस को विरासत में प्राप्त कर सकता है। |
कन्स्ट्रक्टर या डिस्ट्रक्टर | एक इंटरफ़ेस कन्स्ट्रक्टर्स या डिस्ट्रक्टर्स घोषित नहीं कर सकता। | एक अमूर्त वर्ग कन्स्ट्रक्टर्स और डिस्ट्रक्टर्स घोषित कर सकता है। |
एक्सटेंशन की सीमा | यह किसी भी संख्या में इंटरफेस का विस्तार कर सकता है। | यह एक समय में केवल एक वर्ग या एक अमूर्त वर्ग का विस्तार कर सकता है। |
सार कीवर्ड | अमूर्त इंटरफ़ेस कीवर्ड में, किसी विधि को अमूर्त के रूप में घोषित करने के लिए वैकल्पिक है। | एक अमूर्त वर्ग में, एक विधि को अमूर्त के रूप में घोषित करने के लिए अमूर्त कीवर्ड अनिवार्य है। |
कक्षा का प्रकार | एक इंटरफ़ेस में केवल सार्वजनिक अमूर्त विधियाँ ही हो सकती हैं। | एक अमूर्त वर्ग में संरक्षित और सार्वजनिक अमूर्त विधियां होती हैं। |
इंटरफ़ेस और एब्स्ट्रैक्ट क्लास के लिए नमूना कोड Java
इंटरफ़ेस और अमूर्त वर्ग बनाने के लिए नमूना कोड निम्नलिखित है Java
इंटरफ़ेस सिंटैक्स
interface name{ //methods }
Java इंटरफ़ेस उदाहरण:
interface Pet { public void test(); } class Dog implements Pet { public void test() { System.out.println("Interface Method Implemented"); } public static void main(String args[]) { Pet p = new Dog(); p.test(); } }
अमूर्त वर्ग वाक्यविन्यास
abstract class name{ // code }
सार वर्ग उदाहरण:
abstract class Shape { int b = 20; abstract public void calculateArea(); } public class Rectangle extends Shape { public static void main(String args[]) { Rectangle obj = new Rectangle(); obj.b = 200; obj.calculateArea(); } public void calculateArea() { System.out.println("Area is " + (b * b)); } }