Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

Java में एब्सट्रैक्ट क्लास कब उपयोग करें और इंटरफेस कब उपयोग करें?


एक इंटरफेस का उपयोग कॉन्ट्रैक्ट बिहेवियर को परिभाषित करने के लिए किया जा सकता है और यह दो सिस्टम्स के बीच इंटरैक्ट करने के लिए कॉन्ट्रैक्ट के रूप में भी कार्य कर सकता है जबकि एक एब्सट्रैक्ट क्लास मुख्य रूप से सबक्लासेस के लिए डिफ़ॉल्ट बिहेवियर को परिभाषित करने के लिए उपयोग की जाती है, इसका अर्थ है कि सभी चाइल्ड क्लासेस को वही कार्यक्षमता करनी चाहिए।

एब्सट्रैक्ट क्लास कब उपयोग करें

  • यदि हम इनहेरिटेंस कॉन्सेप्ट का उपयोग कर रहे हैं तो एब्सट्रैक्ट क्लास एक अच्छा विकल्प है क्योंकि यह डेराइव्ड क्लासेस के लिए कॉमन बेस क्लास इम्प्लीमेंटेशन प्रदान करता है।
  • यदि हम नॉन-पब्लिक मेंबर्स डिक्लेयर करना चाहते हैं तो एब्सट्रैक्ट क्लास भी अच्छी है। इंटरफेस में सभी मेथड्स पब्लिक होने चाहिए।
  • यदि हम भविष्य में नए मेथड्स जोड़ना चाहते हैं, तो एब्सट्रैक्ट क्लास एक बेहतर विकल्प है। क्योंकि यदि हम इंटरफेस में नए मेथड्स जोड़ते हैं, तो उस इंटरफेस को इम्प्लीमेंट करने वाली सभी क्लासेस को नए मेथड्स को इम्प्लीमेंट करने के लिए बदलना होगा।
  • यदि हम अपने कंपोनेंट के मल्टीपल वर्जन बनाना चाहते हैं, तो एब्सट्रैक्ट क्लास बनाएं। एब्सट्रैक्ट क्लासेस हमारे कंपोनेंट्स को वर्जन करने का एक सरल और आसान तरीका प्रदान करती हैं। बेस क्लास को अपडेट करके, सभी इन्हेरिटिंग क्लासेस परिवर्तन के साथ ऑटोमेटिकली अपडेट हो जाती हैं। दूसरी ओर, इंटरफेसेस एक बार बनने के बाद बदले नहीं जा सकते। यदि इंटरफेस का नया वर्जन आवश्यक है, तो हमें पूरी नई इंटरफेस बनानी होगी।
  • एब्सट्रैक्ट क्लासेस का लाभ है कि वे बेहतर फॉरवर्ड कम्पैटिबिलिटी की अनुमति देती हैं। एक बार क्लाइंट्स इंटरफेस का उपयोग करते हैं, हम इसे बदल नहीं सकते; यदि वे एब्सट्रैक्ट क्लास का उपयोग करते हैं, तो हम मौजूदा कोड को तोड़े बिना बिहेवियर जोड़ सकते हैं।
  • यदि हम अपने कंपोनेंट के सभी इम्प्लीमेंटेशन्स के बीच कॉमन, इम्प्लीमेंटेड फंक्शनैलिटी प्रदान करना चाहते हैं, तो एब्सट्रैक्ट क्लास का उपयोग करें। एब्सट्रैक्ट क्लासेस हमें अपनी क्लास को आंशिक रूप से इम्प्लीमेंट करने की अनुमति देती हैं, जबकि इंटरफेसेस किसी भी मेंबर के लिए कोई इम्प्लीमेंटेशन नहीं रखते।

उदाहरण

abstract class Car {
    public void accelerate() {
        System.out.println("Do something to accelerate");
    }
    public void applyBrakes() {
        System.out.println("Do something to apply brakes");
    }
    public abstract void changeGears();
}

अब, कोई भी Car जिसे इंस्टेंशिएट किया जाना है उसे changeGears() मेथड को इम्प्लीमेंट करना होगा।

class Alto extends Car {
    public void changeGears() {
        System.out.println("Implement changeGears() method for Alto Car");
    }
}
class Santro extends Car {
    public void changeGears() {
        System.out.println("Implement changeGears() method for Santro Car");
    }
}

इंटरफेस कब उपयोग करें

  • यदि हम जो फंक्शनैलिटी बना रहे हैं वह विविध ऑब्जेक्ट्स की एक विस्तृत श्रृंखला में उपयोगी होगी, तो इंटरफेस का उपयोग करें। एब्सट्रैक्ट क्लासेस का उपयोग मुख्य रूप से उन ऑब्जेक्ट्स के लिए किया जाना चाहिए जो निकटता से संबंधित हैं, जबकि इंटरफेसेस असंबंधित क्लासेस को कॉमन फंक्शनैलिटी प्रदान करने के लिए सबसे उपयुक्त हैं।
  • इंटरफेसेस एक अच्छा विकल्प हैं जब हमें लगता है कि API कुछ समय के लिए नहीं बदलेगा।
  • इंटरफेसेस तब भी अच्छे होते हैं जब हम मल्टीपल इनहेरिटेंस के समान कुछ चाहते हैं क्योंकि हम मल्टीपल इंटरफेसेस इम्प्लीमेंट कर सकते हैं।
  • यदि हम छोटी, संक्षिप्त बिट्स की फंक्शनैलिटी डिज़ाइन कर रहे हैं, तो इंटरफेसेस का उपयोग करें। यदि हम बड़ी फंक्शनल यूनिट्स डिज़ाइन कर रहे हैं, तो एब्सट्रैक्ट क्लास का उपयोग करें।

उदाहरण

public interface Actor {
    void perform();
}
public interface Producer {
    void invest();
}

आजकल अधिकांश एक्टर्स अपनी खुद की फिल्म प्रोड्यूस करने के लिए पर्याप्त अमीर हैं। यदि हम एब्सट्रैक्ट क्लासेस के बजाय इंटरफेसेस का उपयोग कर रहे हैं, तो हम Actor और Producer दोनों को इम्प्लीमेंट कर सकते हैं। साथ ही, हम एक नया ActorProducer इंटरफेस डिफाइन कर सकते हैं जो दोनों को एक्सटेंड करता है।

public interface ActorProducer extends Actor, Producer{
    // कुछ स्टेटमेंट्स
}

  1. - एब्स्ट्रैक्ट क्लास और इंटरफेस में अंतर

    एक एब्स्ट्रैक्ट क्लास में इंस्टेंस मेथड्स हो सकते हैं जो डिफ़ॉल्ट व्यवहार लागू करते हैं। एक इंटरफेस केवल कॉन्स्टेंट्स और इंस्टेंस मेथड्स घोषित कर सकता है, लेकिन डिफ़ॉल्ट व्यवहार लागू नहीं कर सकता और सभी मेथड्स अंतर्निहित रूप से एब्स्ट्रैक्ट होते हैं। एक इंटरफेस के सभी मेंबर्स पब्लिक होते हैं और कोई

  1. - Java में इंटरफेस (Interface)

    एक इंटरफेस Java में एक रेफरेंस टाइप है। यह एक क्लास के समान है। यह एब्स्ट्रैक्ट मेथड्स का एक संग्रह है। एक क्लास इंटरफेस को इम्प्लीमेंट करती है, जिससे इंटरफेस के एब्स्ट्रैक्ट मेथड्स विरासत में मिलते हैं। एब्स्ट्रैक्ट मेथड्स के साथ, एक इंटरफेस में कॉन्स्टेंट्स, डिफ़ॉल्ट मेथड्स, स्टेटिक मेथड्स, और न

  1. - Java में Abstract Class

    अपनी घोषणा में abstract कीवर्ड वाली क्लास को abstract क्लास के रूप में जाना जाता है।Abstract क्लासेज में abstract मेथड्स हो भी सकते हैं और नहीं भी, यानी बिना बॉडी वाले मेथड्स (public void get();)लेकिन, यदि एक क्लास में कम से कम एक abstract मेथड है, तो क्लास को abstract घोषित किया जाना चाहिए।यदि एक क