से https://dzone.com/articles/interface-default-methods-java
जावा 8 “डिफॉल्ट मेथड” या (डिफेंडर विधियों) नई सुविधा का परिचय देता है, जो डेवलपर को इन इंटरफेस के मौजूदा कार्यान्वयन को तोड़ने के बिना इंटरफेस में नए तरीकों को जोड़ने की अनुमति देता है। यह इंटरफ़ेस परिभाषित कार्यान्वयन की अनुमति देने के लिए लचीलापन प्रदान करता है जो उस स्थिति में डिफ़ॉल्ट के रूप में उपयोग करेगा जहां एक ठोस वर्ग उस पद्धति के लिए एक कार्यान्वयन प्रदान करने में विफल रहता है।
public interface A {
default void foo(){
System.out.println("Calling A.foo()");
}
}
public class ClassAB implements A {
}
एक सामान्य सवाल है जो लोग पहली बार नई सुविधा के बारे में सुनते समय डिफ़ॉल्ट तरीकों के बारे में पूछते हैं:
क्या होगा यदि वर्ग दो इंटरफेस को लागू करता है और दोनों इंटरफेस एक ही हस्ताक्षर के साथ एक डिफ़ॉल्ट विधि को परिभाषित करते हैं?
इस स्थिति को स्पष्ट करने के लिए उदाहरण:
public interface A {
default void foo(){
System.out.println("Calling A.foo()");
}
}
public interface B {
default void foo(){
System.out.println("Calling B.foo()");
}
}
public class ClassAB implements A, B {
}
यह कोड निम्नलिखित परिणाम के साथ संकलन करने में विफल रहता है:
java: class Clazz inherits unrelated defaults for foo() from types A and B
इसे ठीक करने के लिए, Clazz में, हमें इसे परस्पर विरोधी पद्धति को ओवरराइड करके हल करना होगा:
public class Clazz implements A, B {
public void foo(){}
}
लेकिन क्या होगा अगर हम अपने स्वयं के कार्यान्वयन के बजाय इंटरफ़ेस ए से विधि फू () के डिफ़ॉल्ट कार्यान्वयन को कॉल करना चाहते हैं।
निम्नानुसार ए # फू को संदर्भित करना संभव है:
public class Clazz implements A, B {
public void foo(){
A.super.foo();
}
}