public class aman {
void m(double a , int b, int c) {
System.out.println("second");
}
void m(float a , int b, double c) {
System.out.println("first");
}
public static void main(String[] args) {
aman obj = new aman();
obj.m(23, 12, 1);
}
}
Qui, metodo m() è stato sovraccaricato ma non sono comprendere perché la chiamata è ambigua perché nel primo metodo solo 1 conversione deve avvenire mentre nel secondo metodo, sono necessarie due conversioni. Quindi, sicuramente il primo metodo avrebbe dovuto essere chiamato. Si prega di dare il motivo per cui questo non sta accadendo o se mi manca qualche regola.Quando si utilizza il sovraccarico con la promozione del tipo, perché la chiamata al metodo è ambigua?
thnks per la tua risposta, l'ho visitata e ho visitato anche http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.2.5 ma qui non ho potuto capire una linea ** Un metodo è più specifico di un altro se qualsiasi chiamata gestita dal primo metodo può essere passata all'altra senza un errore di tipo in fase di compilazione. ** Puoi spiegarlo in modo definitivo – Aman
Definitivamente. Ciò che questa frase significa fondamentalmente è che un metodo può essere considerato più specifico di un altro se qualsiasi chiamata al primo metodo può essere risolta anche con quest'ultimo metodo. Ciò significherebbe che per esempio un metodo 'm (Object)' può risolvere tutte le chiamate a 'm (Utente)' (dato che 'Utente' è un' Oggetto'). Quindi possiamo dire che il metodo 'm (Utente)' è più specifico dell'altro perché le chiamate a 'm (Object)' (come 'm (Integer)') non possono essere risolte da 'm (Utente)' perché lì non c'è alcuna relazione tra 'Integer' e' User'. –
quindi nel mio caso nessun metodo è più specifico, è questo il motivo dell'errore di compilazione? – Aman