class A { T foo(T x, S y){ return x; } } class B extends A { Object foo(Object x, Object y){ return x; } } class C extends B { @Override T foo(T x, String y) { return super.foo(x, y); } }