Pregunta ¿Sobrecarga con diferente tipo de retorno en Java?


¿Por qué no es posible sobrecargar una función simplemente cambiando el tipo de devolución? ¿Eso cambiará en una versión futura de Java?

Por cierto, solo como referencia, ¿es esto posible en C ++?


73
2018-03-13 19:49


origen


Respuestas:


No puedes hacerlo en Java, y no puedes hacerlo en C ++. El razonamiento es que el valor de retorno por sí solo no es suficiente para que el compilador descubra a qué función llamar:

public int foo() {...}
public float foo() {..}

...
foo(); // which one?

128
2018-03-13 19:51



La razón es que las sobrecargas en Java solo están permitidas para métodos con diferentes firmas.

El tipo de devolución no es parte de la firma del método, por lo tanto, no se puede usar para distinguir sobrecargas.

Ver Definición de métodos de los tutoriales de Java.


41
2018-03-13 19:53



Antes de Java 5.0, cuando anula un método, tanto los parámetros como el tipo de retorno deben coincidir exactamente. En Java 5.0, introduce una nueva instalación llamada tipo de retorno covariante. Puede anular un método con la misma firma pero devuelve una subclase del objeto devuelto. En otras palabras, un método en una subclase puede devolver un objeto cuyo tipo es una subclase del tipo devuelto por el método con la misma firma en la superclase.


20
2018-01-19 16:54



Overloaded Los métodos en Java pueden tener diferentes tipos de devolución, dado que las listas de argumentos también son diferentes.


5
2017-10-15 07:36



El compilador no tiene en cuenta el tipo de devolución al diferenciar los métodos, por lo que no puede declarar dos métodos con la misma firma, incluso si tienen un tipo de devolución diferente.


1
2017-07-23 06:38



El tipo de devolución no importa al sobrecargar un método. ¡Solo necesitamos asegurarnos de que no haya ambigüedad!

La única forma en que Java puede saber qué método llamar es diferenciando los tipos de la lista de argumentos. Si el compilador permitiera dos métodos con el mismo nombre y los mismos tipos de argumentos, no habría forma de determinar a cuál debería llamar.


1
2017-07-18 09:39



El compilador no tiene en cuenta el tipo de devolución al diferenciar los métodos, por lo que no puede declarar dos métodos con la misma firma, incluso si tienen un tipo de devolución diferente.

Si conoce la ejecución de funciones, sabrá que cuando llamamos a una función, la parte de definición se ejecuta y, por último, necesitamos la declaración return, por lo tanto podemos decir que return viene después de la definición completa de la función, por eso si hay dos o más funciones con el mismo nombre y con el mismo tipo y no. de argumentos al momento de llamar a cómo el compilador sabrá a cuál llamar, porque el nombre y los parámetros de la función son los mismos. En el momento de realizar la llamada, en primer lugar, todo el enfoque se centrará en los argumentos y el nombre de la función y, una vez completada la definición de la función, trataremos por fin la declaración de devolución.

El error de tiempo de compilación es mejor que el error de tiempo de ejecución. Por lo tanto, el compilador de Java representa el error de tiempo del compilador si declara que el mismo método tiene los mismos parámetros.


0
2017-07-17 07:45



No, no es posible de esa manera, solo se puede sobrecargar por ningún argumento o tipo de datos de los argumentos


-1
2018-02-27 15:08