दिलचस्प पोस्ट
मैवेन के लिए एक नया पैकेजिंग प्रकार कैसे बनाऊँ? सूची प्रारंभिकरण (घुंघराले ब्रेसिज़ का उपयोग करके) विकल्प से बेहतर क्यों है? प्राप्त करें: JSON त्रुटि ऑब्जेक्ट के साथ वादा अस्वीकार करें ग्रहण नहीं चला सकते; JVM समाप्त निकास कोड = 13 ट्विटर ऑट कॉलबैक यूआरएल – लोकलहोस्ट डेवलपमेंट विभिन्न ब्राउज़र में यूआरएल की अधिकतम लंबाई क्या है? डिफ़ॉल्ट पद्धति के बजाय मैं मैन्युअल रूप से प्रमाणीकरण कुकी कैसे बना सकता हूं? फ़ाइल को केवल पढ़ने के लिए खोलें जावास्क्रिप्ट में एक ऑब्जेक्ट गहरा क्लोन करने का सबसे कारगर तरीका क्या है? मैं एक टैबकंट्रोल को बाइंड करने के लिए ViewModels का संग्रह कैसे कर सकता हूं? नॉन फ़ेक्ड आलसी ऑब्जेक्ट्स पर जैक्सन सीरियलाइजेशन से बचें MySQL डाटाबेस से छवियों को कैसे प्राप्त करें और एक HTML टैग में प्रदर्शित करें मापदंडों की सरणी के साथ परम बाँधें पीएचपी का उपयोग कर सर्वर पर छवि अपलोड करते समय डेटाबेस में फ़ाइल नाम को कैसे स्टोर करना है? क्लाइंट आईपी पता jQuery का उपयोग कैसे करें

इंटरफेस, एकाधिक वंशानुक्रम बनाम इंटरफेस, इंटरफेस के लाभ का उपयोग क्यों करना है?

मुझे अभी भी इस बात के बारे में कुछ भ्रम है जो मैंने पाया है अब तक है

(इसी तरह के सवाल पहले ही पूछे गए हैं लेकिन मेरे पास कुछ अन्य बिंदु हैं।)

  1. इंटरफ़ेस केवल सार विधियों और अंतिम क्षेत्रों का संग्रह है।

  2. जावा में कोई बहु-भाग नहीं है

  3. जावा में एकाधिक विरासत हासिल करने के लिए इंटरफेस का उपयोग किया जा सकता है

  4. विरासत का एक मजबूत मुद्दा यह है कि हम मूल वर्ग के कोड को व्युत्पन्न कक्षा में फिर से लिखने के बिना उपयोग कर सकते हैं। हो सकता है यह विरासत के लिए वहां सबसे महत्वपूर्ण बात है

अभी व..

Q1। जैसा कि इंटरफेस में केवल सार विधियां (कोई कोड नहीं) हैं, इसलिए हम यह कैसे कह सकते हैं कि यदि हम कोई इंटरफ़ेस लागू कर रहे हैं तो यह विरासत है? हम इसकी कोड का उपयोग नहीं कर रहे हैं

Q2। अगर एक इंटरफ़ेस लागू करना विरासत नहीं है तो कितने इंटरफेस का उपयोग कई विरासत प्राप्त करने के लिए किया जाता है?

Q3। किसी भी तरह इंटरफेस का उपयोग करने का क्या लाभ है? उनके पास कोई कोड नहीं है हम सभी वर्गों में कोड को फिर से दोबारा लिखने की ज़रूरत है।

तो फिर इंटरफेस क्यों करें?

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

तो इंटरफेस का उपयोग करने के सटीक लाभ क्या हैं? क्या यह वास्तव में एकाधिक-वंशानुक्रम है जो हम इंटरफेस का प्रयोग करते हैं?

वेब के समाधान से एकत्रित समाधान "इंटरफेस, एकाधिक वंशानुक्रम बनाम इंटरफेस, इंटरफेस के लाभ का उपयोग क्यों करना है?"

Q1। जैसा कि इंटरफेस में केवल सार विधियां (कोई कोड नहीं) हैं, इसलिए हम यह कैसे कह सकते हैं कि यदि हम कोई इंटरफ़ेस लागू कर रहे हैं तो यह विरासत है? हम इसकी कोड का उपयोग नहीं कर रहे हैं

हम नहीं कर सकते एकाधिक विरासत प्राप्त करने के लिए इंटरफेस का उपयोग नहीं किया जाता है। वे इसे सुरक्षित से बदल देते हैं, हालांकि थोड़ा कम शक्तिशाली निर्माण। extends बजाय कीवर्ड implements नोट करें

Q2। अगर एक इंटरफ़ेस लागू करना विरासत नहीं है तो कितने इंटरफेस का उपयोग कई विरासत प्राप्त करने के लिए किया जाता है?

वो नहीं हैं। इंटरफेस के साथ एक एकल वर्ग के कई " विचार " हो सकते हैं, अलग एपीआई या क्षमताओं उदाहरण के लिए एक क्लास एक ही समय में Runnable जा सकता है और इसे Runnable किया जा सकता है, जबकि दोनों तरीके प्रभावी ढंग से एक ही काम कर रहे हैं

Q3। किसी भी तरह इंटरफेस का उपयोग करने का क्या लाभ है? उनके पास कोई कोड नहीं है हम सभी वर्गों में कोड को फिर से दोबारा लिखने की ज़रूरत है।

इंटरफेस बहुत-से विरासत वाले हैं, जिसमें कोई भी समस्या नहीं है जो बाद में प्रस्तुत करती है ( डायमंड समस्या की तरह)।

इंटरफेस के लिए कुछ उपयोग-मामले हैं:

  1. वस्तु को प्रभावी ढंग से दो पहचान मिलती है: एक Tank दोनों Vehicle और Weapon आप Tank की एक ऐसी घटना का उपयोग कर सकते हैं जहां या तो पूर्व या बाद की अपेक्षा होती है (बहुरूपता)। यह शायद ही कभी वास्तविक जीवन में एक मामला है और वास्तव में एक वैध उदाहरण है जहां कई वंशानुक्रम बेहतर (या गुण) होते हैं

  2. सरल ज़िम्मेदारियाँ: एक गेम में Tank ऑब्जेक्ट का एक उदाहरण भी आपको एक थ्रेड में क्रियान्वित करने और माउस इवेंट्स पर प्रतिक्रिया देने के लिए ActionListener को चलाने के लिए ActionListener है।

  3. कॉलबैक इंटरफेस: यदि ऑब्जेक्ट ऑब्जेक्ट्स को कॉलबैक इंटरफ़ेस दिया गया है, तो इसे इसके जीवन-चक्र या अन्य ईवेंट के बारे में सूचित किया जा रहा है

  4. मार्कर इंटरफेस: किसी भी तरीके को जोड़ना नहीं, लेकिन ऑब्जेक्ट की क्षमताओं या इच्छाओं को खोजने के instanceof माध्यम से आसानी से पहुंचा जा सकता है। Serializable और Cloneable योग्य इस के उदाहरण हैं।

क्या आप के लिए देख रहे हैं विशेषता (जैसे स्कला में), दुर्भाग्य से जावा में अनुपलब्ध है

इंटरफेस अंतिम स्थैतिक फ़ील्ड्स और अमूर्त विधियों का संग्रह है (एक इंटरफ़ेस में स्थिर तरीकों वाले नए जावा 8 को जोड़ा गया समर्थन)।

परिस्थितियों में इंटरफेस बनाये जाते हैं जब हम जानते हैं कि कुछ कार्य किया जाना चाहिए, लेकिन यह कैसे किया जाना चाहिए, यह अलग-अलग हो सकता है। दूसरे शब्दों में हम यह कह सकते हैं कि हम इंटरफेस लागू करते हैं ताकि हमारी कक्षा किसी विशेष तरीके से बर्ताव करे।

मुझे एक उदाहरण के साथ समझाइए, हम सभी जानते हैं कि जानवर क्या हैं शेर की तरह एक जानवर है, बंदर एक जानवर है, हाथी एक जानवर है, गाय एक जानवर है और इतने पर। अब हम जानते हैं कि सभी जानवर कुछ खाने और सोते हैं लेकिन जिस तरह से प्रत्येक जानवर कुछ खा सकता है या नींद अलग हो सकता है जैसा शेर अन्य जानवरों को शिकार करते हुए खाती है, जहां गाय घास खाती हैं लेकिन दोनों खाओ तो हम इस तरह कुछ छद्म कोड कर सकते हैं,

 interface Animal { public void eat(); public void sleep(); } class Lion implements Animal { public void eat() { // Lion's way to eat } public void sleep(){ // Lion's way to sleep } } class Monkey implements Animal { public void eat() { // Monkey's way to eat } public void sleep() { // Monkey's way to sleep } } 

उपर्युक्त छद्म कोड के अनुसार, खाने या नींदने में सक्षम किसी भी चीज को एक जानवर कहा जाएगा या हम यह कह सकते हैं कि सभी जानवरों को खाने और सोना चाहिए, लेकिन खाने और सोने के रास्ते पशु पर निर्भर करता है।

इंटरफेस के मामले में, हम केवल व्यवहार व्यवहार करते हैं, न कि वास्तविक कोड जैसे वर्गों के उत्तराधिकार के मामले में।

Q1। जैसा कि इंटरफेस में केवल सार विधियां (कोई कोड नहीं) हैं, इसलिए हम कैसे कह सकते हैं कि अगर हम किसी भी इंटरफेस को लागू कर रहे हैं तो यह विरासत है? हम इसकी कोड का उपयोग नहीं कर रहे हैं

कार्यान्वयन इंटरफेस अन्य प्रकार की विरासत है यह उस विरासत के रूप में वर्गों के उत्तराधिकारी के समान नहीं है, जो मूल वर्ग से पुन: उपयोग करने के लिए वास्तविक वर्ग को मिलता है।

Q2। अगर एक इंटरफ़ेस लागू करना विरासत नहीं है तो कितने इंटरफेस का उपयोग कई विरासत प्राप्त करने के लिए किया जाता है?

ऐसा कहा जाता है क्योंकि एक वर्ग एक से अधिक इंटरफेस लागू कर सकता है। लेकिन हमें यह समझने की आवश्यकता है कि यह विरासत कक्षाओं की विरासत से अलग है।

Q3। किसी भी तरह इंटरफेस का उपयोग करने का क्या लाभ है? उनके पास कोई कोड नहीं है हम सभी वर्गों में कोड को फिर से दोबारा लिखने की ज़रूरत है।

इंटरफ़ेस को कार्यान्वित करने से उस वर्ग पर मजबूरी होती है, जिसने इसके सभी सार विधियों को ओवरराइड करना होगा।

मेरी किताब यहां और यहां पर और पढ़ें

चुम्मा

मैंने दिनों की खोज की है, न्यू सप्ताह इंटरफेस को समझने की कोशिश कर रही है और एक ही सामान्य मदद पढ़ने में लग रही है; मैं योगदानों को निराश करने की कोशिश नहीं कर रहा हूं, लेकिन मुझे लगता है कि प्रकाश-बल्ब ने बस क्लिक किया है इसलिए मैं चुप हो गया 🙂

मैं इसे सरल बेवकूफ रखना पसंद करता हूं, इसलिए इंटरफेस के मेरे नये पाया गया दृश्य को प्रकट करेगा।

मैं एक आकस्मिक सांकेतिक शब्दों में परिवर्तन कर रहा हूं, लेकिन मैं इस कोड को पोस्ट करना चाहता हूं, जिसे मैं VB.NET (अन्य भाषाओं के लिए एक ही है) में लिखा था, ताकि दूसरों को इंटरफेस समझ सकें।

अगर मेरे पास यह गलत है, तो कृपया दूसरों को अप-अप टिप्पणियों में बताएं।

व्याख्या

एक फ़ॉर्म पर तीन बटन, प्रत्येक एक पर क्लिक करने से इंटरफ़ेस चर (_data) का एक अलग वर्ग संदर्भ बचाता है। एक इंटरफ़ेस चर में विभिन्न वर्ग संदर्भों की पूरी बात है, जो मुझे समझ में नहीं आया था क्योंकि यह अनावश्यक लग रहा था, फिर इसकी ताकत msgbox से स्पष्ट हो जाती है, मुझे इस कार्य में कार्य करने के लिए केवल एक ही विधि को कॉल करने की ज़रूरत है मामले 'गेटडाटा ()', जो वर्तमान में इंटरफ़ेस संदर्भ चर (_data) द्वारा आयोजित की जाने वाली कक्षा में विधि का उपयोग करता है।

इसलिए हालांकि मैं अपना डेटा (डाटाबेस, वेब या टेक्स्ट फाइल से) प्राप्त करना चाहता हूं, केवल उसी पद्धति के नाम का प्रयोग किया जाता है; उस क्रियान्वयन के पीछे का कोड … मुझे परवाह नहीं है

किसी भी निर्भरता के बिना इंटरफ़ेस का उपयोग करते हुए प्रत्येक वर्ग कोड को बदलना आसान है … यह ओ ओ और एनकैप्सुलेशन में एक महत्वपूर्ण लक्ष्य है।

कब इस्तेमाल करें

कोड कक्षाएं और यदि आप 'गेटडाटा ()' जैसी विधियों के लिए इस्तेमाल की गई उसी क्रिया को ध्यान में रखते हैं, तो उस वर्ग के इंटरफ़ेस को लागू करने और अमूर्त / इंटरफ़ेस के रूप में उस पद्धति के नाम का उपयोग करने के लिए यह एक अच्छा उम्मीदवार है।

मैं ईमानदारी से आशा करता हूं कि इस मुश्किल सिद्धांत के साथ एक साथी नूह को मदद मिलती है।

 Public Class Form1 Private _data As IData = Nothing Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click _data = New DataText() MsgBox(_data.GetData()) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click _data = New DataDB() MsgBox(_data.GetData()) End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click _data = New DataWeb() MsgBox(_data.GetData()) End Sub End Class Public Interface IData Function GetData() As String End Interface Friend Class DataText : Implements IData Friend Function GetData() As String Implements IData.GetData Return "DataText" End Function End Class Friend Class DataDB : Implements IData Friend Function GetData() As String Implements IData.GetData Return "DataDB" End Function End Class Friend Class DataWeb : Implements IData Friend Function GetData() As String Implements IData.GetData Return "DataWeb" End Function End Class 
  1. शब्द "विरासत" का प्रयोग तब भी किया जाता है जब कोई क्लास इंटरफ़ेस लागू करता है, हालांकि "इंटरफ़ेस इम्प्लीमेंटेशन" ("कंक्रीट इनहेरिटन्स" के विपरीत) आईएमओ बेहतर होगा। सादा "वंशानुक्रम" को ठोस विरासत (विस्तार) के लिए आरक्षित किया जाना चाहिए।

  2. आप एक क्लास पर कई इंटरफेस को लागू करके कई असर के 'असर' प्राप्त कर सकते हैं, और तब सभी इंटरफेस के लिए आवश्यक सभी विधियों, गुणों और घटनाओं को लागू कर सकते हैं। कंक्रीट वर्गों के साथ ऐसा करने की एक सामान्य तकनीक है कक्षाओं के साथ 'है-ए' (रचना) रिश्तों को करना जिससे कि आंतरिक इंटरफ़ेस को कार्यान्वित करने के लिए प्रत्येक आंतरिक श्रेणी के कार्यान्वयन में 'वायरिंग अप' कार्यान्वयन किया जाता है। सी ++ जैसे भाषाओं को सीधे कई कंक्रीट उत्तराधिकार का समर्थन करना

  3. इंटरफेस किसी मौजूदा इंटरफेस के साथ संवाद करने की क्षमता के कारण, मौजूदा कक्षाओं (जैसे फ्रेमवर्क) को अपने नए वर्गों से पहले कभी 'देखा' किए बिना इंटरैक्ट करने की अनुमति देता है। अनुबंध के रूप में एक अंतरफलक के बारे में सोचो एक क्लास पर इस इंटरफ़ेस को कार्यान्वित करके, आप अनुबंधित रूप से इसके लिए आवश्यक दायित्वों को पूरा करने के लिए बाध्य हैं।

एक 'वास्तविक दुनिया' का उदाहरण एक विद्युत दीवार सॉकेट होगा – यह एक आम अंतरफलक (रेखा, तटस्थ और पृथ्वी) और एक ऑन / ऑफ स्विच प्रदान करता है, और वोल्टेज, आवृत्ति और अधिकतम वर्तमान जैसे कुछ 'समझ' सम्मेलन हैं। लेकिन आप एक प्रशंसक, एक केतली, या कुछ नए उपकरण को इसके अगले साल आविष्कार करने के लिए प्लग कर सकते हैं, भले ही यह उपकरण तब मौजूद न हो जब इंटरफ़ेस डिजाइन किया गया था।

कक्षाओं के ढीले युग्मन के लिए इंटरफेस महान हैं (देखें सॉलिड के निर्भरता उलटा सिद्धांत और इंटरफ़ेस अलगाव सिद्धांत ), और यूनिट परीक्षण और निर्भरता इंजेक्शन प्रयोजनों के लिए व्यापक रूप से उपयोग किया जाता है।

यह बहुत पुराना सवाल है और जावा -8 रिलीज़ ने इंटरफेस के लिए और अधिक सुविधाएं और पावर जोड़े हैं।

एक इंटरफ़ेस घोषणा में हो सकता है

  1. विधि हस्ताक्षर
  2. डिफ़ॉल्ट तरीकों
  3. स्थैतिक तरीकों
  4. निरंतर परिभाषाएं

इंटरफ़ेस में कार्यान्वयन करने वाले एकमात्र तरीका डिफ़ॉल्ट और स्थिर तरीके हैं।

इंटरफ़ेस का उपयोग:

  1. एक अनुबंध को परिभाषित करने के लिए
  2. असंबद्ध कक्षाओं से लिंक करने के लिए क्षमताएं हैं (उदाहरण के लिए सीरियलजएबल इंटरफ़ेस को कार्यान्वित करने वाले वर्ग या इंटरफ़ेस को लागू करने के अलावा उनके बीच कोई संबंध नहीं हो सकता है
  3. विनिमेय कार्यान्वयन प्रदान करने के लिए जैसे- Strategy_pattern
  4. डिफ़ॉल्ट विधियां आपको अपनी लाइब्रेरीज़ के इंटरफेस में नई कार्यक्षमता जोड़ने और उन इंटरफेस के पुराने संस्करणों के लिए लिखे गए कोड के साथ बायनरी संगतता सुनिश्चित करने में सक्षम बनाती हैं
  5. स्थिर तरीकों के साथ अपने पुस्तकालयों में सहायक विधियों को व्यवस्थित करें (आप अलग-अलग क्लास के बजाय एक ही इंटरफ़ेस में विशिष्ट तरीकों को रख सकते हैं)

संकल्पनाओं को बेहतर समझने के लिए कोड के उदाहरण के लिए इस संबंधित एसई प्रश्न पर एक नज़र डालें:

मुझे अंतरफलक और एक सार वर्ग के बीच अंतर कैसे समझाया जाना चाहिए?

आपके प्रश्नों पर वापस आ रहा है:

Q1। जैसा कि इंटरफेस में केवल सार विधियां (कोई कोड नहीं) हैं, इसलिए हम कैसे कह सकते हैं कि अगर हम किसी भी इंटरफेस को लागू कर रहे हैं तो यह विरासत है? हम इसकी कोड का उपयोग नहीं कर रहे हैं

Q2। अगर एक इंटरफ़ेस लागू करना विरासत नहीं है तो कितने इंटरफेस का उपयोग कई विरासत प्राप्त करने के लिए किया जाता है?

इंटरफ़ेस में स्थिर और डिफ़ॉल्ट तरीकों के लिए कोड शामिल हो सकते हैं। ये डिफ़ॉल्ट तरीके पिछड़े संगतता और स्थिर तरीके प्रदान करता है सहायक / उपयोगिता फ़ंक्शन प्रदान करता है

आप जाव में सच बहुपक्षीय नहीं हो सकते हैं और इंटरफ़ेस इसे प्राप्त करने का तरीका नहीं है। इंटरफ़ेस में केवल स्थिरांक हो सकते हैं तो आप राज्य को प्राप्त नहीं कर सकते लेकिन आप व्यवहार को लागू कर सकते हैं।

आप क्षमता के साथ विरासत को बदल सकते हैं। इंटरफेस वर्गों को लागू करने के लिए कई क्षमताओं प्रदान करता है।

Q3। किसी भी तरह इंटरफेस का उपयोग करने का क्या लाभ है? उनके पास कोई कोड नहीं है हम सभी वर्गों में कोड को फिर से दोबारा लिखने की ज़रूरत है।

मेरे जवाब में " इंटरफ़ेस का उपयोग " अनुभाग देखें

वंशानुक्रम तब होता है जब एक वर्ग दूसरे वर्ग (जो अमूर्त हो सकता है) या इंटरफ़ेस से प्राप्त होता है वस्तु उन्मुख (विरासत) का सबसे मजबूत बिंदु कोड का पुन: उपयोग नहीं करता है (यह करने के कई तरीके हैं), लेकिन बहुरूपता

पॉलीमॉर्फिज़्म तब होता है जब आपके पास इंटरफ़ेस का उपयोग करने वाला कोड होता है, जो कि उदाहरण के ऑब्जेक्ट उस इंटरफ़ेस से प्राप्त किसी भी श्रेणी का हो सकता है। उदाहरण के लिए मेरे पास ऐसी विधि हो सकती है: सार्वजनिक शून्य पालतू (आईएनेल एनिमल) और इस पद्धति को एक ऐसा ऑब्जेक्ट मिलेगा जो कि कुत्ते या बिल्ली का एक उदाहरण है जो आईएनिमल से निकलता है। या मेरे पास ऐसा कोड हो सकता है: IAnimal पशु और फिर मैं इस इंटरफ़ेस की एक विधि कॉल कर सकता हूं: animal.Eat () जो कुत्ता या बिल्ली एक अलग तरीके से लागू कर सकते हैं।

इंटरफेस का मुख्य लाभ यह है कि आप इनमें से कुछ से वारिस प्राप्त कर सकते हैं, लेकिन अगर आपको केवल एक से उत्तराधिकार की आवश्यकता है तो आप एक अमूर्त वर्ग का भी उपयोग कर सकते हैं। यहाँ एक लेख है जो एक अमूर्त वर्ग और इंटरफ़ेस के बीच अंतर के बारे में अधिक बताता है: http://www.codeproject.com/KB/cs/abstractsvsinterfaces.aspx

इंटरफेस बनाये जाते हैं ताकि एक क्लास किसी विशेष तरीके से व्यवहार करना शुरू कर सके। यही मैं कहूंगा।

इंटरफेस

एक इंटरफ़ेस एक अनुबंध है जिसका निर्धारण एक ऑब्जेक्ट के साथ कैसे करें। वे यह व्यक्त करने के लिए उपयोगी होते हैं कि आपके आंतरिकों को किसी ऑब्जेक्ट से कैसे इंटरैक्ट करने का इरादा है। निर्भरता उलटाव के बाद आपके सार्वजनिक एपीआई में सभी पैरामीटर इंटरफेस के साथ प्रदर्शित होंगे। आप परवाह नहीं करते कि ऐसा करने के लिए आपको क्या करना है, बस यह ठीक उसी तरह करता है कि आपको क्या करना चाहिए।

उदाहरण: सामानों के परिवहन के लिए आपको बस एक Vehicle आवश्यकता हो सकती है, आप परिवहन के विशेष मोड की परवाह नहीं करते हैं।

विरासत

विरासत एक विशेष कार्यान्वयन का एक विस्तार है यह कार्यान्वयन एक विशेष इंटरफ़ेस को संतुष्ट या नहीं कर सकता है। आपको केवल एक विशेष कार्यान्वयन के पूर्वजों की अपेक्षा करनी चाहिए, जब आप इसके बारे में कैसे ध्यान दें

उदाहरण: आपको तेजी से परिवहन के लिए एक वाहन के Plane क्रियान्वित करने की आवश्यकता हो सकती है।

रचना

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

उदाहरण: आप एक DuckBoat ( डीयूकेडब्ल्यू ) वर्ग बना सकते हैं जो LandVehicle और WaterVehicle लागू करता है, जो दोनों Vehicle और Truck WaterVehicle से बना Vehicle लागू करते हैं।

जवाब

Q1। जैसा कि इंटरफेस में केवल सार विधियां (कोई कोड नहीं) हैं, इसलिए हम कैसे कह सकते हैं कि अगर हम किसी भी इंटरफेस को लागू कर रहे हैं तो यह विरासत है? हम इसकी कोड का उपयोग नहीं कर रहे हैं

इंटरफेस विरासत नहीं हैं

Q2। अगर एक इंटरफ़ेस लागू करना विरासत नहीं है तो कितने इंटरफेस का उपयोग कई विरासत प्राप्त करने के लिए किया जाता है?

इंटरफेस एकाधिक विरासत हासिल नहीं करते वे व्यक्त करते हैं कि एक कक्षा कई भूमिकाओं के लिए उपयुक्त हो सकती है।

Q3। किसी भी तरह इंटरफेस का उपयोग करने का क्या लाभ है? उनके पास कोई कोड नहीं है हम सभी वर्गों में कोड को फिर से दोबारा लिखने की ज़रूरत है।

इंटरफेस के प्रमुख लाभों में से एक यह है कि चिंताओं को अलग करना है:

  • आप उस क्लास को लिख सकते हैं जो बिना किसी क्लास के कुछ काम करता है, जो बिना क्लास को लागू किया जाता है।
  • किसी विशेष आधार वर्ग को विस्तारित किए बिना किसी भी भविष्य के विकास को आपके कार्यान्वयन के साथ संगत किया जा सकता है।

DRY की भावना में आप एक कार्यान्वयन लिख सकते हैं जो एक इंटरफ़ेस को संतुष्ट करता है और इसे बदलता है जबकि अभी भी संरचना का लाभ उठाने पर open/closed principal सम्मान करते open/closed principal