interface I1 { public m1(); } interface I2 { public m2(); } class Implementation implements I1, I2 { public m1() {} public m2() {} } class Tester { public m3(T x) { x.m1(); x.m2(); } } public class TestExtendedClassesWithBoundedGenerics { public m() { x; /*can only be of Type Implementation*/ x= new Implementation(); y; /*could be of Type: Tester, Tester*/ y= new Tester(); y.m3(x); } }