class Test1 { interface A { void foo(T x); default void foo(String x) { } } class C implements A { } abstract class D implements A {} interface E extends A {} } class Test2 { interface A { default void foo(String x) { } } interface B extends A { void foo(T x); } class C implements B { } abstract class D implements B {} interface E extends B {} } class Test3 { interface A { default void foo(T x) {} default void foo(String x) { } } class C implements A { } abstract class D implements A {} interface E extends A {} } class Test4 { interface A { default void foo(String x) { } } interface B extends A { default void foo(T x) {} } class C implements B { } abstract class D implements B {} interface E extends B {} }