Por que não é possível sobrecarregar uma função apenas alterando o tipo de retorno? Isso mudará em uma versão futura do Java?
A propósito, apenas para referência, isso é possível em C ++?
java
overloading
nunos
fonte
fonte
Respostas:
Você não pode fazer isso em Java e não pode fazer em C ++. A justificativa é que o valor de retorno sozinho não é suficiente para o compilador descobrir qual função chamar:
fonte
float
, édouble
.foo();
sem um tipo de retorno seria ambíguo não é necessariamente um motivo para rejeitá-lo como uma sobrecarga. Existem argumentos que podem causar ambigüidade (por exemplofoo(null);
), mas isso não torna a sobrecarga inerentemente inválida.A razão é que sobrecargas em Java são permitidas apenas para métodos com assinaturas diferentes .
O tipo de retorno não faz parte da assinatura do método, portanto, não pode ser usado para distinguir sobrecargas.
Consulte Definindo métodos a partir dos tutoriais Java.
fonte
calculateAnswer(double, int, double, double)
". Veja se o tipo de retorno não está incluído, @konmik.Antes do Java 5.0, quando você substitui um método, os parâmetros e o tipo de retorno devem corresponder exatamente. No Java 5.0, ele introduz um novo recurso chamado tipo de retorno covariant. Você pode substituir um método com a mesma assinatura, mas retorna uma subclasse do objeto retornado. Em outras palavras, um método em uma subclasse pode retornar um objeto cujo tipo é uma subclasse do tipo retornado pelo método com a mesma assinatura na superclasse.
fonte
Overloaded
os métodos em java podem ter diferentes tipos de retorno, visto que o argumento também é diferente.Confira o código de amostra.
fonte
O compilador não considera o tipo de retorno ao diferenciar métodos, portanto, você não pode declarar dois métodos com a mesma assinatura, mesmo se eles tiverem um tipo de retorno diferente.
fonte
O tipo de retorno não importa ao sobrecarregar um método. Precisamos apenas garantir que não haja ambigüidade!
A única maneira de o Java saber qual método chamar é diferenciando os tipos da lista de argumentos. Se o compilador permitisse dois métodos com o mesmo nome e os mesmos tipos de argumento, não haveria como determinar qual deveria chamar.
fonte
O compilador não considera o tipo de retorno ao diferenciar métodos, portanto, você não pode declarar dois métodos com a mesma assinatura, mesmo se eles tiverem um tipo de retorno diferente.
Se você está ciente da execução da função, então você deve estar ciente de que quando chamamos uma função, a parte da definição executa e, por fim, exigimos a instrução de retorno, portanto, podemos dizer que o retorno vem após a definição inteira da função, é por isso que se houver dois ou mais funções com o mesmo nome e com o mesmo tipo e não. de argumentos, então, no momento da chamada, como o compilador saberá sobre qual deles deve ser chamado, porque o nome da função e os parâmetros são os mesmos. No momento da chamada, primeiro todo o foco estará nos argumentos e no nome da função e, após a conclusão da definição da função, finalmente lidamos com a instrução de retorno.
Compile Time Error é melhor do que Run Time Error. Portanto, o compilador java renderiza o erro de tempo do compilador se você declarar o mesmo método com os mesmos parâmetros.
fonte
não, não é realmente possível dessa forma, você só pode sobrecarregar por nenhum dos argumentos ou tipo de dados dos argumentos
fonte