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