class A<a> { } class B<a> extends A<a> { f(Boolean x) { if (x) { return new B<Integer>(); } else { return new A<Integer>(); } } } class C<a> extends B<A<a>> {}