, чтобы ответить «почему моя программа вызывает float« площадь квадрата », когда она должна вызывать« площадь круга »?»
Это потому, что метод точного совпадения, который принимает аргумент int, не найден, следовательно, основан на расширении, вызывается ближайший сопоставленный метод (здесь его float)
расширение происходит в порядке ниже
byte -> short -> int -> long -> float -> double
в вашем случае его (int -> long -> float -> double)
поскольку вы передаете аргумент int, следовательно, ближайшее совпадение является методом, который принимает аргумент с плавающей точкой, следовательно, calArea (float a) называется
[чтобы проверить эту попытку, включая метод, который принимает длинный аргумент, и вы увидите, что он получит шанс выполнить вместо более раннего метода, который принимает аргумент с плавающей запятой]
1011 * например *
public void calArea (int a) {
System.out.println ( "ИНТ");
}
public void calArea (long a) {
System.out.println ( "длинный");
}
- public void calArea (float a) {
System.out.println ( "плавать");
}
- public void calArea (double a) {
System.out.println ( "двойной");
}
вызов метода is - calArea (5);
Случай 1: допустим, нет комментариев
здесь будет вызван метод, принимающий аргумент int.
case 2: теперь комментируйте / удаляйте первый метод (принимает аргумент int)
здесь будет вызван метод, принимающий длинный аргумент.
case 3: теперь снова прокомментируйте метод 1 и 2 метод
здесь будет вызван метод, принимающий аргумент float.
и так далее ...