perché il programma chiede foo(String x)
anziché foo(Object x)
Questo perché String
classe estende da Object
e quindi è più specifico Object
. Quindi, il compilatore decide di invocare quel metodo. Ricorda, il compilatore sceglie sempre il metodo più specifico da invocare. Vedere Section 15.12.5 of JLS
Se più di un metodo membro è accessibile e applicabile ad una chiamata di metodo , è necessario scegliere uno di fornire il descrittore per il metodo di spedizione in fase di esecuzione. La lingua Java programmazione utilizza la regola che il metodo più specifico è scelto.
L'intuizione informale è che un metodo è più specifico di altro eventuale invocazione gestita dal primo metodo potrebbe essere passato sulla all'altro senza un errore in fase di compilazione.
Tuttavia, se si dispone di due metodi con parametri - String
e Integer
, poi si otterrebbe ambiguity
di errore per null
, come compilatore non può decidere quale è più specifica, in quanto sono i tipi non covarianti.
fonte
2013-02-09 15:15:28
I sovraccarichi non vengono risolti staticamente utilizzando il tipo di espressione in fase di compilazione? –
'foo (null)' chiama il metodo della classe superiore –
@GrijeshChauhan Che classe superiore. La domanda non menziona una gerarchia di classi. – millimoose