上級 › default メソッドの衝突と解決 › パターン5
default メソッドの衝突と解決
複数のインターフェースから同名を継承すると衝突します。
1 interface A { default String name() { return "A"; } } 2 interface B { String name(); } 3 public class Main implements A, B { 4 _______________________________________________ ^ 5 public static void main(String[] args) { 6 System.out.println(new Main().name()); 7 } 8 }
Main.java:3: error: Main is not abstract and does not override abstract method name() in B
空欄を埋めてビルドを通す
Bがname()を抽象メソッドとして再宣言しているため、Aのdefault実装は自動継承されません。実装クラス側で明示的にオーバーライドする必要があります。
次の問題