Sovraccarico con diverso tipo di reso in Java?

Perché non è ansible sovraccaricare una funzione semplicemente cambiando il tipo di ritorno? Cambierà in una versione futura di Java?

A proposito, solo per riferimento, è ansible in C ++?

Non puoi farlo in Java e non puoi farlo in C ++. La logica è che il valore di ritorno da solo non è sufficiente per il compilatore per capire quale funzione chiamare:

public int foo() {...} public float foo() {..} ... foo(); // which one? 

Il motivo è che gli overload in Java sono consentiti solo per i metodi con firme diverse.

Il tipo restituito non fa parte della firma del metodo, quindi non può essere utilizzato per distinguere gli overload.

Vedere Definizione dei metodi dalle esercitazioni di Java.

Prima di Java 5.0, quando si esegue l’override di un metodo, sia i parametri che il tipo restituito devono corrispondere esattamente. In Java 5.0, introduce una nuova funzione chiamata tipo di ritorno covariante. È ansible sovrascrivere un metodo con la stessa firma ma restituisce una sottoclass dell’object restituito. In altre parole, un metodo in una sottoclass può restituire un object il cui tipo è una sottoclass del tipo restituito dal metodo con la stessa firma nella superclass.

Overloaded metodi di Overloaded in java possono avere diversi tipi di ritorno dato che anche gli elenchi di argomenti sono diversi.

Il compilatore non considera il tipo restituito quando si differenziano i metodi, quindi non è ansible dichiarare due metodi con la stessa firma anche se hanno un tipo di ritorno diverso.

Il tipo di reso non ha importanza durante il sovraccarico di un metodo. Dobbiamo solo assicurarci che non ci siano ambiguità!

L’unico modo in cui Java può sapere quale metodo chiamare è quello di differenziare i tipi dell’elenco degli argomenti. Se il compilatore consentisse due metodi con lo stesso nome e lo stesso tipo di argomento, non ci sarebbe alcun modo per determinare quale dovrebbe chiamare.

Il compilatore non considera il tipo restituito quando si differenziano i metodi, quindi non è ansible dichiarare due metodi con la stessa firma anche se hanno un tipo di ritorno diverso.

Se sei a conoscenza dell’esecuzione della funzione, ti renderai conto che quando chiamiamo una funzione viene eseguita la parte di definizione e alla fine richiediamo l’istruzione return, quindi possiamo dire che il ritorno arriva dopo l’intera definizione della funzione, ecco perché se ci sono due o più funzioni con lo stesso nome e con lo stesso tipo e no. di argomenti allora al momento di chiamare come il compilatore saprà su quale debba essere chiamato, perché il nome della funzione e i parametri sono gli stessi. Al momento della chiamata in primo luogo, tutta l’attenzione sarà sugli argomenti e sul nome della funzione e, dopo il completamento della definizione della funzione, avremo finalmente a che fare con la dichiarazione di ritorno.

L’errore del tempo di compilazione è migliore dell’errore di esecuzione. Quindi, il compilatore java restituisce l’errore del compilatore se dichiari lo stesso metodo con gli stessi parametri.

no non è realmente ansible in questo modo è ansible solo sovraccaricare da no di argomenti o tipo di dati degli argomenti