Начиная с Java 5, ковариантные возвращаемые типы разрешены для переопределены методы. Это означает, что переопределенному методу в подклассе разрешено использовать подпись, которая возвращает тип, который может быть подклассом возвращаемого типа родительской подписи.
Чтобы сделать этот бетон, у вас есть этот интерфейс:
public interface MyInterface {
Number apply(double op1, double op2);
:
:
}
Следующая является законным, поскольку возвращаемый тип является подклассом номер:
public class MyClass implements MyInterface {
:
:
@Override
public Integer apply(double op1, double op2) {
:
:
return Integer.valueOf(result);
}
}
Потому что перегруженные методы (которые имеют одно и то же имя, но разные подписи) - это фактически разные методы, вы можете использовать разные типы возвращаемых данных, если хотите ... однако ... это обескураживает, потому что методы с таким же именем, типы могут вводить в заблуждение программистов и могут усложнять использование вашего API. Лучше не перегружать mrthods, когда вы можете разумно избежать этого.
Почему бы не попробовать и не выяснить? – Todd
Нет, Java не допускает полиморфизм по типу возврата. Ваш пример работает из-за разных списков параметров. – duffymo
Вы всегда можете вернуть ковариантный тип в переопределение. Однако вы не можете обеспечить перегрузку, которая переопределяет эквивалент другому определению в том же классе. –