interface J<A> extends T<A> { @Override <B> int foofoofoo(A a, B b); } abstract class J1<X> implements J<U<X>> { @Override public <C> int foofoofoo(U<X> xu, C c) { throw new UnsupportedOperationException(); } } abstract class J2 extends J1<String> { @Override public <C> int foofoofoo(U<String> xu, C c) { throw new UnsupportedOperationException(); } }