1 class Main { 2 3 class Foo { } 4 5 interface GenericBase <F> { } 6 7 class GenericDerived <F extends Foo> implements GenericBase<F> { } 8 9 private <B extends Foo> void foo(GenericBase<B> g) { } 10 11 private <D extends Foo> void foo(GenericDerived<D> g) { } 12 13 void bar() { 14 GenericDerived<Foo> gd = new GenericDerived<>(); 15 foo(gd); 16 } 17 }