Suppose I have two interfaces:
public interface I1 { default String getGreeting() { return "Good Morning!"; } } public interface I2 { default String getGreeting() { return "Good Afternoon!"; } }
If I want to implement both of them, what implementation will be used?
public class C1 implements I1, I2 { public static void main(String[] args) { System.out.println(new C1().getGreeting()); } }
Advertisement
Answer
This is a compile-time error. You cannot have two implementation from two interfaces.
However, it is correct, if you implement the getGreeting
method in C1
:
public class C1 implements I1, I2 // this will compile, bacause we have overridden getGreeting() { public static void main(String[] args) { System.out.println(new C1().getGreeting()); } @Override public String getGreeting() { return "Good Evening!"; } }
I just want to add that even if the method in I1 is abstract, and default in I2, you cannot implement both of them. So this is also a compile-time error:
public interface I1 { String getGreeting(); } public interface I2 { default String getGreeting() { return "Good afternoon!"; } } public class C1 implements I1, I2 // won't compile { public static void main(String[] args) { System.out.println(new C1().getGreeting()); } }