如何在 Java 中打印不同的参数化多态方法



我已经声明了三个方法,它们都具有相同的名称"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 个不同的输出,每个方法一个。这可能吗?可能为每种方法计算不同的数字?

感谢您的帮助,麦克斯。

方法重载(编译时多态性(在基于方法签名(即方法名称、参数类型和参数顺序(的 java 中工作。

在您的情况下,当文本值为 3000000000 时,该值位于长数据范围内。

在 java 中,如果声明文本值大于 2 147 483 647,则应用字母">l"或">L"作为文本后缀。

因此,将您的参数传递为 3000000000L 或 3000000000L 与另一个 int 参数,然后将调用 float 参数方法(这将通过向上转换参数来完成(

对于基元类型,向上转换的工作方式如下。

字节 -> 短 -> int -> 长 -> 浮点数 -> 双精度

对于以下行

System.out.println(sum(3000000000L, 3));

你会得到答案,因为

3.0E9

此输出将由浮点参数类型方法生成。

最新更新