class Obj<T> {} abstract class A1<X>{ abstract void foo(Obj<String> x); } class B1 extends A1{ @Override void foo(Obj x) { <caret> } }