abstract class F<A, B> { public abstract B f(A a); public final F<A, P1<B>> lazy() { return new F<A, P1<B>>() { public P1<B> f(final A a) { return null; } }; } private class TestClient<A, B> extends F<A, P1<B>> { public P1<B> f(final A a) { return null; } } } class P1<T> { }