क्या मैं इंटरफ़ेस विधियों को सार विधियों के रूप में मान सकता हूं?


15

मैं उस बारे में सोच रहा था, और मुझे कुछ संदेह था।

जब मैं एक इंटरफ़ेस घोषित करता हूं, उदाहरण के लिए:

public interface MyInterface
{
   public void method1();
   public void method2();
}

क्या इन इंटरफ़ेस विधियों को अमूर्त माना जा सकता है? मेरा मतलब है कि एक अमूर्त विधि की अवधारणा है:

एक अमूर्त विधि एक ऐसी विधि है जिसे घोषित किया जाता है, लेकिन इसमें कोई कार्यान्वयन नहीं होता है।

तो, क्या इन तरीकों को अमूर्त माना जा सकता है? वे "शुद्ध" अमूर्त तरीके नहीं हैं क्योंकि मैं abstractशब्द का उपयोग नहीं कर रहा हूं , लेकिन वैचारिक रूप से, ऐसा लगता है जैसे वे हैं।

आप मुझे इसके बारे में क्या बता सकते हैं?

धन्यवाद।


संभवत:
billy.bob

5
@ billy.bob - मुझे लगता है कि स्टैक ओवरफ्लो के लिए यह बहुत सार है। यहां कोई विशिष्ट कोडिंग समस्या नहीं है।
ChrisF

क्या यह जावा कोड है?
एंड्रेस एफ।

नहीं यह नहीं। यह सिर्फ एक उदाहरण है। सवाल किसी भी प्रोग्रामिंग भाषाओं पर केंद्रित नहीं है।
rogcg

जवाबों:


14

एक इंटरफ़ेस "विशुद्ध रूप से" सार वर्ग की तरह है। वर्ग और इसके सभी तरीके अमूर्त हैं। एक अमूर्त वर्ग में विधियों को लागू किया जा सकता है लेकिन वर्ग को तत्काल (विरासत के लिए उपयोगी और DRY के बाद उपयोगी) नहीं किया जा सकता है।

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

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

वे अलग-अलग हैं इसलिए एक वर्ग कई इंटरफेस को लागू कर सकता है। जावा और सी # एक एकल मूल वर्ग से अंतर्निहित एक वर्ग को प्रतिबंधित करते हैं। कुछ भाषाएं आपको कई वर्गों से विरासत में मिलती हैं और आप "विशुद्ध रूप से" सार वर्ग के माध्यम से एक इंटरफ़ेस का काम पूरा कर सकते हैं। लेकिन कई विरासत में इसकी समस्याएँ हैं, जिसका नाम है खूंखार डायमंड समस्या


एक अमूर्त वर्ग की विरासत और एक या अधिक इंटरफेस के कार्यान्वयन के बीच अंतर को शामिल करने के लिए +1।

डायमंड प्रॉब्लम एक भयानक विरोधाभास है।
rogcg

1
मैं 'एक इंटरफ़ेस "विशुद्ध रूप से अमूर्त वर्ग" भाग की तरह असहमत हूं। वे OO 'बिल्डिंग ब्लॉक्स' के 2 अलग-अलग प्रकार हैं, इसलिए वे वास्तव में समान नहीं हैं। वे कुछ सामान्य विशेषताओं को साझा करते हैं, लेकिन प्रकृति में वे अलग-अलग प्रकार के हैं, उदाहरण के लिए पुरुषों और महिलाओं की तरह अधिक :)
NoChance

5
@ एम्मैंड करीम मैं 'एक इंटरफ़ेस "विशुद्ध रूप से" अमूर्त वर्ग' भाग की तरह नहीं है। इसलिए मैंने इसे :-) लिखा है। यदि आपके पास अपनी असहमति के लिए कोई अच्छा कारण है तो कृपया पोस्ट करें, सुनना पसंद है
कोडर

यह ध्यान देने योग्य है कि c # 8 एक डिफ़ॉल्ट इंटरफ़ेस कार्यान्वयन
जॉन वू

11

मुझे यहाँ एक उपयोगी उत्तर मिला: http://download.oracle.com/javase/tutorial/java/IandI/abname.html

एक इंटरफ़ेस में सभी विधियाँ स्पष्ट रूप से अमूर्त हैं, इसलिए इंटरफ़ेस विधियों के साथ अमूर्त संशोधक का उपयोग नहीं किया जाता है (यह हो सकता है - यह आवश्यक नहीं है)।


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

2
यह भी ध्यान दें कि आप कई इंटरफेस को लागू कर सकते हैं, लेकिन आप केवल एक वर्ग से प्राप्त कर सकते हैं, अमूर्त या नहीं।
NullUserException

@ ThorbjørnRavnAndersen: एक इंटरफ़ेस एक या अधिक इंटरफेस बढ़ा सकता है। यह सुपर क्लास के समान नहीं है, लेकिन यह विरासत का एक स्तर है।
अनहेल्सेम्प्लर

आप कई इंटरफेस लागू कर सकते हैं। कई विरासत की अवधारणा की तरह दिखता है, लेकिन वास्तव में नहीं।
rogcg

@unholysampler, जो एक सुपरक्लास नहीं है - जैसा कि मैंने कहा।

4

अमूर्त कक्षाओं में सार विधियां हो सकती हैं।

इंटरफेस में केवल अमूर्त विधियाँ हो सकती हैं।

method1()और method2()आपके उदाहरण में सार विधियां हैं।


-1

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


8
अमूर्त विधियों में कार्यान्वयन विवरण नहीं हो सकता है। सार वर्ग कर सकते हैं।
मैट एच।

मुझे एक विधि और एक वर्ग के बीच का अंतर पता है - लेकिन मैं उस बिंदु को नहीं समझ सकता जो आप बना रहे हैं?
billy.bob

आपके उत्तर में कहा गया है कि अमूर्त विधियों में कार्यान्वयन विवरण हो सकते हैं - वे नहीं कर सकते। बस एक टाइपो?
मैट एच।

1
मैंने टाइपो तय किया।
Martijn Verburg

1
@ billy.bob यह प्रश्न हालांकि अगाध पद्धति के बारे में है।
सोय्लेंटग्रे 15

-2

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


-3

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.