interface A1 { String foo(); } interface B1 { Object foo(); } class C1<T extends B1 & A1> { void bar(T x) { String foo = x.foo(); } } class C2<T extends A1 & B1> { void bar(T x) { String foo = x.foo(); } }