दिलचस्प पोस्ट
मुझे किस तरह की ज़रूरत है? Type.GetType ("namespace.abClassName") नल देता है जावास्क्रिप्ट से एक सीएसएस नियम सेट बदलना UIViewController पर UIViewController पेश करने का प्रयास करना, जिसका दृश्य विंडो पदानुक्रम में नहीं है Itextsharp: बिल्कुल एक पृष्ठ पर 2 तत्वों को समायोजित करें PHP में बड़ी संख्या में कार्य करना DatePickerDialog Android में आज की तारीख से पहले दिनांक को अक्षम कैसे करें? AJAX – एकाधिक डेटा वापसी प्रकार का असाइनमेंट ऑपरेटर क्या है? CoreLocation के साथ अपने वर्तमान स्थान को कैसे खोजें जावा में स्थिर तरीके क्यों सार नहीं हो सकते सी में बाइट सरणी के लिए हेक्साडेसिमल स्ट्रिंग किसी WPF टेक्स्ट बॉक्स को कॉन्ट्रैक्ट नहीं कर रहा है, जो .NET 4.0 में काम नहीं कर रहा है डीबग लक्ष्य लापता है? AngularJS में गुंजाइश प्रोटोटाइप / प्रोटोटाइपिकल विरासत की बारीकियों क्या हैं?

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

जावा 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() कैसे कॉल करेंगे?

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

इस अनुच्छेद के अनुसार आप उपयोग कर अंतरफलक 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