2009-02-21 14 views
15

सी # में, यदि आपके पास एक ही विधि (कहें, एफ()) के साथ दो आधार इंटरफेस हैं, तो आप विभिन्न इम्प्लेक्ट करने के लिए स्पष्ट कार्यान्वयन का उपयोग कर सकते हैं। एफ() के लिए। यह आपको ऑब्जेक्ट का अलग-अलग दृष्टिकोण के साथ अलग-अलग दृष्टिकोण का इलाज करने की अनुमति देता है: IMIInterface1 या IMyInterface2 के रूप में। जावा में यह संभव है?जावा में मौजूद इंटरफेस का सी # "स्पष्ट कार्यान्वयन" है?

उत्तर

25

नहीं, जावा में सी # के स्पष्ट इंटरफ़ेस कार्यान्वयन की तरह कुछ भी नहीं है।

प्लस तरफ, जावा में कॉन्व्रैरिट रिटर्न प्रकार हैं, इसलिए यदि आप इंटरफ़ेस निर्दिष्ट करने से अधिक दृढ़ता से टाइप किए गए कार्यान्वयन प्रदान करना चाहते हैं, तो ठीक है। उदाहरण के लिए, इस ठीक है:

interface Foo 
{ 
    Object getBar(); 
} 

public class Test implements Foo 
{ 
    @Override 
    public String getBar() 
    { 
     return "hi"; 
    } 
} 

सी # कि अनुमति नहीं होगी - और यह चारों ओर से एक तरीके से स्पष्ट रूप से एक अधिक विशिष्ट सार्वजनिक विधि (आमतौर पर इंटरफेस कार्यान्वयन से बुलाया इंटरफ़ेस को लागू करने और उसके बाद है आम तौर पर है)।

0

यदि आप विधियों को ओवरलोड कर चुके हैं तो आप केवल यह कर सकते हैं। यदि आपके पास दो विधियां हैं जो अलग-अलग चीजों को करने की अपेक्षा की जाती हैं, तो उनके पास अलग-अलग नाम IMHO होना चाहिए।

-17

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

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

+0

आप यह भी मानना ​​है कि निजी वंशानुक्रम केवल "लोग हैं, जो अच्छा डिजाइन के साथ परेशान नहीं किया जा सकता है" के लिए है? जावा से यह एक और उपयोगी ओओपी क्षमता गायब है। –

+0

यह जावा में कभी भी इसी कारण से नहीं होगा कि प्रतिनिधियों जावा में कभी नहीं होंगे .. इसे Google करें। इस बारे में एक अच्छा लेख है कि प्रतिनिधियों ने जावा में कभी नहीं किया और यह समान है। यह बुरा है क्योंकि इससे आपको अच्छी चीजें नहीं मिलतीं जो आप इसके साथ कर सकते हैं। कुछ माइक्रोसॉफ्ट और इसका पारिस्थितिक तंत्र नहीं मिलता है। – eaglestorm

+1

@ एलजेस्टॉर्म, आपको एहसास है कि स्विंग "ऑब्जेक्ट्स" ऑब्जेक्ट्स को प्रतिनिधियों की तरह व्यवहार करने के लिए भी सही है? साथ ही, मुझे यह थोड़ा मनोरंजक लगता है कि आपके लगभग सभी प्रश्न .NET से संबंधित हैं। –

3

आप जावा में अज्ञात इंटरफ़ेस कार्यान्वयन के तंत्र का उपयोग करके समान प्रभाव प्राप्त कर सकते हैं।

उदाहरण देखें:

interface Foo { 

    void f(); 
} 

interface Bar { 

    void f(); 
} 

public class Test { 

    private String foo = "foo", bar = "bar"; 

    Foo getFoo() { 
     return new Foo() { 

      @Override 
      public void f() { 
       System.out.println(foo); 
      } 
     }; 
    } 

    Bar getBar() { 
     return new Bar() { 

      @Override 
      public void f() { 
       System.out.println(bar); 
      } 
     }; 
    } 

    public static void main(String... args) { 
     Test test = new Test(); 
     test.getFoo().f(); 
     test.getBar().f(); 
    } 
} 
संबंधित मुद्दे