दिलचस्प पोस्ट
सी ++ में इनलाइन कार्यों के लाभ? PHP में register_shutdown_function () का उपयोग करके घातक त्रुटियों को संभालें जावा एप्लिकेशन इंस्टॉलर क्या एक वीडियो गेम आंतरिक भंडारण पर संग्रहीत एक वीडियो चला सकता है? बैकबोन.जेएस रिक्त अर्रे विशेषता एक वेब पेज के लोड और निष्पादन अनुक्रम? ObjC में स्वयं क्या है? मुझे इसका उपयोग कब करना चाहिए? एक Django forms.ChoiceField पर चयनित मान सेट करना एस्प्रेसो: थ्रेड.sleep (); अजगर कुंजीशब्द "के साथ" के लिए प्रयोग किया जाता है? कैसे आरजीबी UIColor से मूल्य प्राप्त करने के लिए? MVC4 में ब्राउजर बैक बटन क्लिक ब्राउजर कैश कैसे साफ़ करें? पांड्या: डेटाफ्रेम के उपनिर्देशक: प्रतियां बनाम विचार रेल त्रुटि, YAML को पार्स नहीं कर सका UITabBar ऊँचाई बदलें

जावा सार इंटरफ़ेस

एक उदाहरण पर गौर करें (जो जावा में संकलित है)

public abstract interface Interface { public void interfacing(); public abstract boolean interfacing(boolean really); } 

इंटरफ़ेस के लिए "घोषित" सार के लिए क्यों आवश्यक है? क्या कोई अन्य नियम है जो अमूर्त इंटरफ़ेस के साथ लागू होता है?


आखिरकार: यदि abstract अप्रचलित है, तो यह जावा में क्यों शामिल है? क्या अमूर्त अंतरफलक के लिए कोई इतिहास है?

वेब के समाधान से एकत्रित समाधान "जावा सार इंटरफ़ेस"

इंटरफ़ेस के लिए "घोषित" सार के लिए क्यों आवश्यक है?

यह।

 public abstract interface Interface { \___.__/ | '----> Neither this... public void interfacing(); public abstract boolean interfacing(boolean really); \___.__/ | '----> nor this, are necessary. } 

इंटरफेस और उनके तरीकों में निहित abstract और जोड़ते हुए कि संशोधक कोई फर्क नहीं पड़ता।

क्या कोई अन्य नियम है जो अमूर्त इंटरफ़ेस के साथ लागू होता है?

नहीं, समान नियम लागू होते हैं विधि किसी भी (ठोस) कार्यान्वयन वर्ग द्वारा कार्यान्वित की जानी चाहिए।

यदि सार अप्रचलित है, तो यह जावा में क्यों शामिल है? क्या अमूर्त अंतरफलक के लिए कोई इतिहास है?

दिलचस्प सवाल मैंने जेएलएस का पहला संस्करण खोला, और यहां भी "यह संशोधक अप्रचलित है और नये जावा प्रोग्राम्स में उपयोग नहीं किया जाना चाहिए"

ठीक है, खुदाई भी आगे … कई टूटी हुई कड़ियों को मारने के बाद, मैं मूल ओक 0.2 विशिष्टता (या "मैनुअल") की एक प्रति प्राप्त करने में कामयाब रहा। काफी दिलचस्प मुझे पढ़ा जाना चाहिए, और कुल में केवल 38 पृष्ठों! 🙂

धारा 5 के तहत, इंटरफेस, यह निम्नलिखित उदाहरण प्रदान करता है:

 public interface Storing { void freezeDry(Stream s) = 0; void reconstitute(Stream s) = 0; } 

और मार्जिन में यह कहते हैं

भविष्य में, इंटरफेस में तरीकों को घोषित करने का "= 0" हिस्सा दूर जा सकता है।

मान लें =0 को abstract खोजशब्द द्वारा बदल दिया गया है, मुझे संदेह है कि abstract कुछ तरीकों पर इंटरफेस विधियों के लिए अनिवार्य था!


संबंधित लेख: जावा: सार इंटरफेस और अमूर्त इंटरफ़ेस विधियाँ

यह आवश्यक नहीं है, यह वैकल्पिक है, बस इंटरफ़ेस विधियों पर public रूप में।

इस पर जेएलएस देखें:

http://java.sun.com/docs/books/jls/second_edition/html/interfaces.doc.html

9.1.1.1 अमूर्त इंटरफेस हर इंटरफेस पूर्णतः अमूर्त है। यह संशोधक अप्रचलित है और नए कार्यक्रमों में उपयोग नहीं किया जाना चाहिए।

तथा

9.4 सार विधि घोषणापत्र

[…]

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

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

अंतरफलक सार को घोषित करना आवश्यक नहीं है।

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

कोई भी आपको रोक नहीं रहा है, यद्यपि।

अन्य बातों को आप स्पष्ट रूप से बता सकते हैं, लेकिन इसकी आवश्यकता नहीं है:

  • एक कन्स्ट्रक्टर की पहली पंक्ति पर super () कॉल करें
  • extends Object
  • इनहेरिट की हुई इंटरफेस लागू करें

क्या कोई अन्य नियम है जो अमूर्त इंटरफ़ेस के साथ लागू होता है?

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

ध्यान रखें कि वसंत में इसका अकादमिक अर्थ नहीं है। अमूर्त अंतरफलक डेवलपर को चेतावनी देता है कि इसका इस्तेमाल @Autowired लिए नहीं किया जा सकता। मुझे आशा है कि वसंत / ग्रहण @Autowired इस विशेषता को देखेंगे और इस तरह के उपयोग के बारे में चेतावनी / असफल

एक वास्तविक उदाहरण: @ ट्रांज़नैशनल को @ रेजोजीटरी के तहत सेवा प्रॉक्सी को एक ही मूलभूत तरीकों का उपयोग करने की आवश्यकता है, लेकिन उन्हें अलग-अलग इंटरफेस का उपयोग करना चाहिए जो कि @Autowired कारण इस सार इंटरफ़ेस को @Autowired । (मैं इस XXXSpec इंटरफ़ेस को कॉल करता हूं)

हर इंटरफ़ेस निहित तौर पर सार है
यह संशोधक अप्रचलित है और नए कार्यक्रमों में उपयोग नहीं किया जाना चाहिए।

[जावा भाषा विशिष्टता – 9.1.1.1 abstract इंटरफेस]

यह भी ध्यान रखें कि इंटरफ़ेस सदस्य विधियां निहित public abstract
[जावा भाषा विशिष्टता – 9.2 इंटरफ़ेस सदस्य]

उन संशोधकों को अंतर्निहित क्यों हैं? कोई भी अन्य संशोधक नहीं है (यहां तक ​​कि ' कोई भी संशोधक ' -एमओडीफायर भी नहीं) जो कि यहां उपयोगी होगा, इसलिए आपको इसे टाइप करने के लिए स्पष्ट रूप से टाइप करना नहीं है

यह आवश्यक नहीं है यह भाषा का एक झंकार है

यह आवश्यक नहीं है, क्योंकि इंटरफेस डिफ़ॉल्ट रूप से होते हैं क्योंकि इंटरफ़ेस में सभी तरीकों का सार होता है।

एक अमूर्त अंतरफलक अनावश्यक नहीं है क्योंकि हर कोई कह रहा है, सिद्धांत रूप में कम से कम

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

उदाहरण:

 public abstract interface MyBaseInterface { public String getName(); } public interface MyBoat extends MyBaseInterface { public String getMastSize(); } public interface MyDog extends MyBaseInterface { public long tinsOfFoodPerDay(); } 

आप एक कक्षा को MyBaseInterface को लागू करने के लिए नहीं चाहते हैं, केवल दो अन्य, MMyDog और MyBoat, लेकिन दोनों इंटरफेस MyBaseInterface इंटरफ़ेस साझा करते हैं, इसलिए एक 'नाम' संपत्ति है

मैं इसकी तरह शैक्षणिक जानता हूं, लेकिन मैंने सोचा कि कुछ इसे दिलचस्प लग सकता है। 🙂

यह वास्तव में इस मामले में सिर्फ एक 'मार्कर' है, इंटरफ़ेस के लागूकर्ताओं को सिग्नल करने के लिए कि यह स्वयं को लागू करने के लिए डिज़ाइन नहीं किया गया था। मुझे एक कंपाइलर को इंगित करना चाहिए (कम से कम सूर्य / ओआरए 1.6 मैं इसे करने की कोशिश की है) एक ऐसा वर्ग संकलित करता है जो अमूर्त इंटरफ़ेस लागू करता है।

खैर 'एब्स्ट्रेट इंटरफ़ेस' एक लेक्सिकल निर्माण है: http://en.wikipedia.org/wiki/Lexical_analysis

यह संकलक द्वारा आवश्यक है, आप interface भी लिख सकते हैं।

अच्छी तरह से भाषा का लेक्सिकल निर्माण में बहुत अधिक नहीं मिलता है क्योंकि वे कुछ संकलन अस्पष्टता को हल करने के लिए वहां डाल सकते हैं, जिसे प्रक्रिया के दौरान या कुछ पिछड़े संगतता के दौरान विशेष मामलों के रूप में कहा जाता है, कोर लेक्सिकल निर्माण पर ध्यान केंद्रित करने का प्रयास करें।

`इंटरफ़ेस का सार कुछ अमूर्त अवधारणा (विचार / विचार / उच्च आदेश सोच आदि) को लागू करना है जिसका कार्यान्वयन भिन्न हो सकता है … यानी, कई कार्यान्वयन हो सकते हैं।

एक अंतरफलक एक शुद्ध सार डेटा प्रकार है जो ऑब्जेक्ट की कैप्चरिंग या प्रतिनिधित्व करने वाली सुविधाओं का प्रतिनिधित्व करता है।

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

यदि आपकी कंक्रीट वर्ग सभी सुविधाओं को लागू नहीं करता है, तो यह फिर से सारभूत हो जाता है क्योंकि आपके पास आपके विचार या विचार या अमूर्तता का कार्यान्वयन है लेकिन यह पूर्ण नहीं है, आप इसे abstract वर्ग द्वारा निर्दिष्ट करते हैं।

एक कंक्रीट वर्ग क्लास / क्लास का सेट होगा, जो पूरी तरह से अमूर्त को पकड़ लेगा जिसे आप कक्षा XYZ पर कब्जा करने की कोशिश कर रहे हैं।

तो पैटर्न है

 Interface--->Abstract class/Abstract classes(depends)-->Concrete class