Он будет компилироваться, но если вы столкнетесь с проблемами, то если Happy или Sad - суперкласс другого.
Например, следующие компиляции:
public <T extends Number> T sayHi() {
System.out.println("number");
return null;
}
public <T extends Integer> T sayHi() {
System.out.println("integer");
return null;
}
Однако,вы сталкиваетесь с проблемами, когда пытаетесь скомпилировать следующее:
Integer test = sayHi();
В этом случае вы просто не можете добавить <Integer>
вперед, потому что Integer по-прежнему является как числом, так и целым числом.
Однако следующие компиляции
Double test2 = <Double>sayHi();
, так что в основном, пока объект Sad не может быть экземпляром объекта Happy, и наоборот, ваш код должен работать, пока вы вызываете его с или впередимени метода.