class A<S> {
    <T> T foo(T x, S y){
        return x;
    }
}

class B<S> extends A<S> {
    Object foo(Object x, Object y){
        return x;
    }
}

<error descr="'foo(T, S)' in 'A' clashes with 'foo(Object, Object)' in 'B'; both methods have same erasure, yet neither overrides the other">class C extends B<String></error> {
    @Override
    <T> T foo(T x, String y) {
        return super.<error descr="Incompatible types. Found: 'java.lang.Object', required: 'T'">foo</error>(x, y);
    }
}