interface IA { <T extends Cloneable & Iterable> void foo(T x); <T extends Iterable & Cloneable> void foo(T x); } abstract class A<T extends Throwable> { abstract <T extends Comparable<?> & Iterable> void foo(T x, A<?> y); abstract <T extends Iterable & Comparable<?>> void foo(T x, A<? extends Throwable> y); }