class Main {
class Foo { }
interface GenericBase <F> { }
class GenericDerived <F extends Foo> implements GenericBase<F> { }
private <B extends Foo> void foo(GenericBase<B> g) { }
private <D extends Foo> void foo(GenericDerived<D> g) { }
void bar() {
GenericDerived<Foo> gd = new GenericDerived<>();
foo(gd);
}
}