Предположим, что я один перегруженный класс, как показано нижеAmbiguty и не подходящий метод нашел ошибку в Java перегружать
class Test{
public void m1(int a,float b){
System.out.println("hello");
}
public void m1(float a,int b){
System.out.println("hai");
}
public static void main(String[] args){
Test t = new Test();
t.m1(10,10);//error
t.m1(10.5f,10.6f);//error
}
}
, когда я называю m1()
метод с двумя INT значения, как m1(10,10)
ошибка
error: reference to m1 is ambiguous, both method m1(int,float) in Test and method m1(float,int) in Test match
t.m1(10,10);
^
и когда я вызываю m1()
метод с двумя значениями с плавающей запятой, такими как m1(10.5f,10.6f)
ошибка
error: no suitable method found for m1(float,float)
t.m1(10.5f,10.6f);
^
method Test.m1(float,int) is not applicable
(actual argument float cannot be converted to int by method invocation conversion)
method Test.m1(int,float) is not applicable
(actual argument float cannot be converted to int by method invocation conversion)
Может кто-нибудь объяснить причину, почему эта программа показывает два разных типа ошибок?
Интересно, почему вы ожидаете равных ошибок? Как должен компилятор _promote_ 'float' в' int', когда 'int' является« более низким »типом данных, который вызывает потерю данных? – Tom
Я думал, что в области области компилятор не нашел методы, которые я вызываю, поэтому я ожидал 'никакой подходящей ошибки метода' для обоих вызовов метода –
И почему вы считаете, что оба метода не подходят, когда вы вызываете их с' int'? – Tom