Writing binds the type name T, so that it can be referred to later in the definition (including in the parameter list).
If you wrote extends Animal>, then you did not name the type. Therefore, you cannot refer to it later. You can't refer to it as ? later because that could be ambiguous (what if you had two type parameters?).
Java forbids you from writing public > ... because such a declaration is useless (the type parameter is not named so it cannot be used).