interface A { void foo(T x); default void foo(String x) { } } class C implements A { @Override public void foo(String x) { A.super.foo(x); } } interface A2 { Object foo(T x); default Integer foo(String x) { return null; } } abstract class C2 { public void foo(A2 x) { x.foo(""); } }