दिलचस्प पोस्ट
जावास्क्रिप्ट गुंजाइश और बंद द्विआधारी कारक और लेबल के प्रतिशत के साथ स्टैक्ड प्रतिशत बार प्लॉट (जीजीप्लोट के साथ) मैं कुंजीटोल कैसे पा सकता हूं और चला सकता हूँ सीरियलज़ेबल का प्रयोग करते हुए आशय के माध्यम से डेटा पास करना मैं डेपर के साथ नेस्टेड ऑब्जेक्ट्स की सूची कैसे मैप करता हूं लक्ष्य 'एंड्रॉइड -16' को हल करने में असमर्थ ScrollView में ViewPager Jstl में foreach लूप से सूचक मूल्य कैसे प्राप्त करें मैं कैसे जांचूं अगर एक तत्व jQuery में छुपा हुआ है? Windows Powershell में वर्तमान उपयोगकर्ता नाम कैसे प्राप्त करें? जावा में सुंदर प्रिंट JSON वर्तमान सप्ताह के लिए सोमवार और शुक्रवार की तिथि प्राप्त करें (PHP) एचटीएमएल एंटीटी डिकोड स्रोत नियंत्रण में कितनी बार बदलाव करना है? इकाई ढांचे में शामिल होने छोड़ दिया

स्पष्ट रूप से जावा में एक डिफ़ॉल्ट विधि को बुला रहा है

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

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

interface A { default void foo() { System.out.println("A.foo"); } } class B implements A { @Override public void foo() { System.out.println("B.foo"); } public void afoo() { // how to invoke A.foo() here? } } 

उपरोक्त कोड को ध्यान में रखते हुए, आप कक्षा बी की विधि से ए। A.foo() कैसे कॉल करेंगे?

Solutions Collecting From Web of "स्पष्ट रूप से जावा में एक डिफ़ॉल्ट विधि को बुला रहा है"

इस अनुच्छेद के अनुसार आप उपयोग कर अंतरफलक A में डिफ़ॉल्ट विधि का उपयोग कर सकते हैं

 A.super.foo(); 

इसका उपयोग निम्न प्रकार से किया जा सकता है (इंटरफ़ेस A और C दोनों को डिफ़ॉल्ट विधि foo() )

 public class ChildClass implements A, C { @Override public void foo() { //you could completely override the default implementations doSomethingElse(); //or manage conflicts between the same method foo() in both A and C A.super.foo(); } public void bah() { A.super.foo(); //original foo() from A accessed C.super.foo(); //original foo() from C accessed } } 

A और C दोनों .foo() तरीके और विशिष्ट डिफ़ॉल्ट कार्यान्वयन चुना जा सकता है या आप अपने नए foo() विधि के हिस्से के रूप में एक (या दोनों) का उपयोग कर सकते हैं आप अपने कार्यान्वयन वर्ग में अन्य विधियों में डिफ़ॉल्ट संस्करणों तक पहुंचने के लिए एक ही वाक्यविन्यास का उपयोग भी कर सकते हैं।

नीचे दिए गए कोड को काम करना चाहिए

 public class B implements A { @Override public void foo() { System.out.println("B.foo"); } void aFoo() { A.super.foo(); } public static void main(String[] args) { B b = new B(); b.foo(); b.aFoo(); } } interface A { default void foo() { System.out.println("A.foo"); } } 

आउटपुट:

 B.foo A.foo 

आपको एक इंटरफ़ेस की डिफ़ॉल्ट विधि को ओवरराइड करने की आवश्यकता नहीं है। बस इसे निम्नलिखित की तरह बुलाओ:

 public class B implements A { @Override public void foo() { System.out.println("B.foo"); } public void afoo() { A.super.foo(); } public static void main(String[] args) { B b=new B(); b.afoo(); } } 

आउटपुट:

A.foo