2011-12-16 17 views
49

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

(इसी प्रकार के प्रश्नों को पहले से ही यहाँ कहा गया है, लेकिन मैं कुछ अन्य अंक रहा था।) है

  1. इंटरफेस सिर्फ सार तरीकों और अंतिम क्षेत्रों का संग्रह है।

  2. जावा में कोई एकाधिक विरासत नहीं है।

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

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

अब

..

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

प्रश्न 2। यदि इंटरफ़ेस को कार्यान्वित करना विरासत नहीं है तो एकाधिक विरासत प्राप्त करने के लिए इंटरफ़ेस का उपयोग कैसे किया जाता है?

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

फिर इंटरफेस क्यों बनाना है?

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

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

उत्तर

12

इंटरफेस अंतिम स्थैतिक फ़ील्ड और अमूर्त तरीकों का संग्रह है (नए जावा 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 
    } 
} 

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

इंटरफेस के मामले में हम केवल व्यवहार का वारिस करते हैं, न कि कक्षाओं की विरासत के मामले में वास्तविक कोड।

प्रश्न 1। चूंकि इंटरफेस में केवल अमूर्त विधियां हैं (कोई कोड नहीं) तो हम कैसे कह सकते हैं कि यदि हम किसी इंटरफ़ेस को कार्यान्वित कर रहे हैं तो यह विरासत है? हम इसके कोड का उपयोग नहीं कर रहे हैं।

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

प्रश्न 2। यदि इंटरफ़ेस को कार्यान्वित करना विरासत नहीं है तो एकाधिक विरासत प्राप्त करने के लिए इंटरफ़ेस का उपयोग कैसे किया जाता है?

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

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

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

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

+2

मुझे लगता है कि आपके कोड में जो संरचना बनाई गई है, वह बेहतर और अधिक तार्किक होगा, जिसमें उपकरण-इंटरफेसिंग के मुकाबले विस्तार-विरासत होगी। मुझे लगता है कि यह एक बुरा उदाहरण है –

+0

@gprathour मैं सहमत हूं, इसलिए कृपया एक बेहतर उदाहरण प्रदान करें :) –

28

प्रश्न 1। चूंकि इंटरफेस में केवल अमूर्त विधियां हैं (कोई कोड नहीं) तो हम कैसे कह सकते हैं कि यदि हम किसी इंटरफ़ेस को कार्यान्वित कर रहे हैं तो यह विरासत है? हम इसके कोड का उपयोग नहीं कर रहे हैं।

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

प्रश्न 2। यदि इंटरफ़ेस को कार्यान्वित करना विरासत नहीं है तो एकाधिक विरासत प्राप्त करने के लिए इंटरफ़ेस का उपयोग कैसे किया जाता है?

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

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

इंटरफेस किसी भी समस्या के साथ कई विरासत हैं (जैसे Diamond problem)।

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

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

  2. सरल जिम्मेदारियों: एक खेल में Tank वस्तु का एक उदाहरण भी Runnable आप एक सूत्र में निष्पादित करने देने के लिए है और एक ActionListener माउस की घटनाओं पर प्रतिक्रिया के लिए।

  3. कॉलबैक इंटरफेस: वस्तु लागू कॉलबैक इंटरफ़ेस दिया है, वह अपने जीवन चक्र या अन्य घटनाओं के बारे में सूचित किया जा रहा है।

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

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

+0

क्या आप इंटरफेस का उपयोग करने के विस्तृत लाभ कृपया कर सकते हैं? – gprathour

+0

@GPSingh: मैंने 'Q3' के नीचे कुछ बिंदु जोड़ने की कोशिश की। क्या आपके पास कुछ और प्रश्न हैं? –

3

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

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

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

4
  1. शब्द "विरासत" अभी भी अक्सर जब एक वर्ग के लिए एक इंटरफेस को लागू करता है, प्रयोग किया जाता है, हालांकि "इंटरफेस कार्यान्वयन" (के रूप में "कंक्रीट विरासत" का विरोध) बेहतर आईएमओ होगा। सादा विरासत (विस्तार) के लिए सादा "विरासत" आरक्षित किया जाना चाहिए।

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

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

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

इंटरफेस कक्षाओं के ढीले युग्मन के लिए बहुत अच्छे हैं (Dependency Inversion Principle and Interface Segregation Principles of SOLID देखें), और व्यापक रूप से यूनिट परीक्षण और निर्भरता इंजेक्शन उद्देश्यों के लिए उपयोग किया जाता है।

9

KISS

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

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

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

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

स्पष्टीकरण एक फार्म पर

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

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

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

जब

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

मुझे ईमानदारी से उम्मीद है कि यह इस कठिन सिद्धांत के साथ एक साथी नोब की मदद करता है।

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 
+0

वास्तव में बहुत अच्छा है। +1 –

0

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

4

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

एक इंटरफेस घोषणा

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

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

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

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

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

How should I have explained the difference between an Interface and an Abstract class?

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

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

प्रश्न 2। यदि इंटरफ़ेस को कार्यान्वित करना विरासत नहीं है तो एकाधिक विरासत प्राप्त करने के लिए इंटरफ़ेस का उपयोग कैसे किया जाता है?

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

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

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

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

मेरे उत्तर में "इंटरफ़ेस" अनुभाग का संदर्भ लें।

-1

इंटरफेस

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

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

विरासत

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

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

संरचना

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

उदाहरण: आप एक DuckBoat (DUKW) वर्ग कि LandVehicle और WaterVehicle जो दोनों को लागू VehicleTruck और Boat कार्यान्वयन से बना लागू करता है बना सकते हैं।

जवाब

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

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

प्रश्न 2। यदि इंटरफ़ेस को कार्यान्वित करना विरासत नहीं है तो एकाधिक विरासत प्राप्त करने के लिए इंटरफ़ेस का उपयोग कैसे किया जाता है?

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

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

  • आप देखभाल कैसे उस वर्ग कार्यान्वित किया जाता है बिना एक वर्ग है कि एक और वर्ग के साथ कुछ करता है लिख सकते हैं:

इंटरफेस के बड़ा लाभ यह है चिंताओं की जुदाई प्रदान करना है।

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

    +0

    आईआरटी डाउनवॉट्स, मैं इस जवाब को कैसे सुधार सकता हूं? –

    संबंधित मुद्दे