interface I { I m(I x); } interface J { J m(J x); } class A implements I, J { A() { super(); } A m(A x) { return x; } /* should fail */ } new A().m(new A())