package source; abstract class X implements T { @Override public S getFoo() { return null; } } class Y implements T { @Override public String getFoo() { return null; } } class Z implements T { @Override public Boolean getFoo() { return null; } } interface U extends T { }