Originariamente inviato da arasino
prova a creare una classe con quei metodi
codice:
 public class Pluto
 {
   public static int pippo(double a,float b,int c) {}
   public static int pippo(float a,double b,int c) {}
   public static int pippo(float a,int b,long c) {}
   public static int pippo(float a,long b,int c) {}
 }
e a richiamare un metodo con tre interi:

codice:
 ...
  Pluto.pippo(5,5,5);
 ...
Il compilatore ti segnalerà errore perchè appunto c'è ambiguità in alcune funzioni.

per farti capire con un esercizio più semplice:

codice:
 public class Pluto
 {
   public static int pippo(double a,float b) {}
   public static int pippo(float a,double b) {}
 }
richiamando:

codice:
 ...
  Pluto.pippo(5,5);
 ...
questa sistuazione è ambigua perchè tutti e due i metodi sono buoni per Pluto.pippo(5,5) e il compilatore non sa scegliere quello giusto segnalandomi giustamente l'errore.
Sono le invocazioni ad essere ambigue lì, non le firme dei metodi: non trovando alcun metodo che accetti due int (5 è un letterale di tipo int), il linguaggio cerca di convertirlo al posto tuo, ma giustamente non sa cosa fare e la compilazione fallisce. Nell'ultimo esempio da te mostrato, dovresti essere tu a specificare i tipi dei parametri che stai passando: per chiamare il primo dovresti scrivere:
codice:
pippo(5.0, 5.0f)
mentre per chiamare il secondo:
codice:
pippo(5.0f, 5.0)
Questo potrebbe esserti utile: http://docs.oracle.com/javase/tutori...datatypes.html

In alternativa ai letterali, c'è sempre il casting esplicito:
codice:
pippo((float) 5, (double) 5)