interface I1 { public m1(); } class Implementation implements I1 { public m1() { } } class TestClassesWithBoundedGenericsUsedInMethods { /*since S is at least of Type I1, call m1() should work*/ public void m3 (S x) { x.m1(); } /*T is bounded by class generics, thus always at least of type I1*/ public m2(T x) { x.m1(); } }