我已经声明了三个名称都相同的方法“ sum”,目的是简单演示参数多态性的工作原理,但是我不知道如何分别调用每个方法,这对我有帮助用。 如何调用每种方法并知道正在调用哪种方法?
我尝试了一个简单的System.out.println(sum(2,3));
,它返回5,但是如果我将整数之一设置为整数范围之外,则会出现错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The literal 3000000000 of type int is out of range
at codeTester.main.main(main.java:30)
/*
Author: Maxim Wilmot
Created: 18/04/2019
Polymorphism - Parametric
*/
package codeTester;
public class main {
//integer between -2 147 483 648 and 2 147 483 647
public static int sum(int a, int b) {
return a + b;
}
//decimal between -3,4.10^38 and 3,4.10^38
public static float sum(float a, float b) {
return a + b; //
}
//decimal between -1,7.10^308 and 1,7.10^308
public static double sum(double a, double b) {
return a + b;
}
public static void main(String args[]) {
System.out.println(sum(2,3)); //call a method, which one ?
}
}
我想要3种不同的输出,每种方法1种。那可能吗 ?每种方法可能计算不同的数字吗?
感谢您的帮助, 最多
答案 0 :(得分:0)
方法重载(编译时多态)在Java中基于方法签名(即方法名称,参数类型和参数顺序)工作。
在您的情况下,当文字值是3000000000时,该值位于较长的数据范围内。
在Java中,如果声明的文字值大于2147483647,则应在文字后缀字母“ l ”或“ L ”。
因此,将您的参数作为3000000000L或3000000000l传递给另一个int参数,然后将调用float参数方法(这将通过参数的向上转换来完成)
原始类型的上传工作如下。
byte-> short-> int-> long-> float-> double
对于下面的行
System.out.println(sum(3000000000L, 3));
您将获得
的答案3.0E9
此输出将由float参数类型方法产生。