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

时间:2019-04-18 14:15:38

标签: java polymorphism parametric-polymorphism

我已经声明了三个名称都相同的方法“ 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种。那可能吗 ?每种方法可能计算不同的数字吗?

感谢您的帮助, 最多

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参数类型方法产生。