A ASSINATURA DO MÉTODO INCLUI O TIPO DE RETORNO.
O compilador o ignora quando precisa verificar se há duplicatas. Para Java é ilegal ter dois métodos com a assinatura diferindo apenas pelo tipo de retorno.
Tente isso:
public class Called {
public String aMethod() {
return "";
}
}
public class Caller {
public static void main(String[] main) {
aMethod();
}
public static void aMethod() {
Called x = new Called();
x.aMethod();
}
}
Compile o projeto, vá para o diretório bin, copie o Caller.cass em algum lugar. Em seguida, altere o método chamado:
public int aMethod() {
return 0;
}
Construa o projeto, você verá que Called.class e Caller.class têm um novo carimbo de data / hora. Substitua o Caller.class acima e execute o projeto. Você terá uma exceção:
java.lang.NoSuchMethodError: it.prova.Called.aMethod()Ljava/lang/String;