abstract class A { public abstract D foo(); } interface B { F foo(); } class C extends A implements B { public F foo() { return null; } } class D {} class F extends D {}