Ответ 1
Потому что это называется перегрузкой .
В частности, тип возвращаемого типа может быть ковариантным, поскольку он не учитывается при перегрузке и, следовательно, по-прежнему соответствует реализации суперкласса или интерфейса. При перегрузке учитываются параметры. У вас может быть оптимизация с Number doSomethingWithNumber(Integer value)
по сравнению с Number doSomethingWithNumber(Number value)
.