class Base<T> { T f() { return null; } } class A<T2> extends Base<T2> { @Override T2 f() { return null; } } class B extends Base<Integer> { @Override Integer f() { return null; } } class C { Integer f() { return null; } }
A has a parameter T2 which is erased in A.
B because B is not a generic class and nothing is erased from B.
Base has the same shape as A; B has the same shape as C.
A has a parameter T2 which is erased in A.
B because B is not a generic class and nothing is erased from B.
Base has the same shape as A; B has the same shape as C.