-
Notifications
You must be signed in to change notification settings - Fork 5.5k
Description
Description
Case 1 — Identical Abstract Methods
Example
interface A { void show(); }
interface B { void show(); }
class Test implements A, B {
public void show() {
System.out.println("Implemented once");
}
}
Key Points
Both interfaces declare the same method signature.
The class implements it once.
One implementation satisfies both interfaces.
Result
No ambiguity
Compiles successfully
Reason: Abstract methods contain no implementation — only a contract to fulfill.
Case 2 — Identical Default Methods
Example
interface A {
default void show() { System.out.println("A show"); }
}
interface B {
default void show() { System.out.println("B show"); }
}
class Test implements A, B { }
Result
Compile-time error:
Duplicate default methods show() from A and B
Reason:
Both interfaces provide implementations — Java cannot choose between them.
This is the interface form of the Diamond Problem.
Resolution — Override Explicitly
class Test implements A, B {
@Override
public void show() {
A.super.show(); // choose A
}
}
Options
Use one implementation
A.super.show();
Combine both
A.super.show();
B.super.show();
Provide custom logic
System.out.println("Custom behavior");
Best Practices to Avoid Conflicts
Always override conflicting default methods
Design interfaces with clear separation of responsibility
Avoid overlapping default implementations
Document interface composition
Use abstract classes when shared behavior hierarchy is needed
Conclusion
Java handles multiple interface inheritance safely when:
Abstract overlaps are implemented once
Default conflicts are resolved explicitly
Following structured interface design prevents ambiguity and improves maintainability.