class Parent<X> {} class Child<Y> extends Parent<Y> {} class A {} class B extends A {} class C extends A {} class Test { <T> Parent<T> foo(Parent<? extends T> ... o) { return null; } <T> Parent<T> bar(Parent<T>... o) { return null; } Child<B> childB; Child<C> childC; void methodCall() { foo(childB, childC); bar(childB, childB); } }