📜  Java中方法重载的不同方法

📅  最后修改于: 2020-03-30 14:56:27             🧑  作者: Mango

先决条件: 重载
Java可以区分具有不同方法签名的方法。也就是说,方法可以具有相同的名称,但在同一类中具有不同的参数列表(即参数的数量,参数的顺序和参数的数据类型)。

  • 重载方法根据作为参数传递给方法的参数的数量和类型进行区分。
  • 您不能定义多个具有相同名称、顺序和参数类型的方法,这将产生编译器错误。
  • 区分重载方法时,编译器不考虑返回类型。但是您不能声明具有相同签名和不同返回类型的两个方法。它将引发编译时错误。
    如果两个方法都具有相同的参数类型,但返回类型不同,这是不可能的。(Java SE 8 Edition,§8.4.2)

为什么我们需要方法重载?

如果我们需要以不同的方式(即针对不同的输入)执行相同类型的操作。在下面描述的示例中,我们对不同的输入进行加法运算。很难为单个动作找到许多不同的有意义的名称。

进行方法重载的不同方法

方法重载可以通过更改:

  • 两种方法中的参数数量。
  • 方法的参数的数据类型。
  • 方法的参数顺序。

方法1:通过更改参数的数量。

import java.io.*;
class Addition{
    // 把两个整数相加.
    public int add(int a, int b){
        int sum = a+b;
        return sum;
    }
    // 把三个数相加.
    public int add(int a, int b, int c){
        int sum = a+b+c;
        return sum;
    }
}
class GFG {
    public static void main (String[] args) {
        Addition ob = new Addition();
        int sum1 = ob.add(1,2);
        System.out.println("两个数的和 :" + sum1);
        int sum2 = ob.add(1,2,3);
        System.out.println("三个数的和 :" + sum2);
    }
}

输出:

两个数的和 :3
三个数的和 :6

方法2:通过更改参数的数据类型

import java.io.*;
class Addition{
    // 三个int相加
    public int add(int a, int b, int c){
        int sum = a+b+c;
        return sum;
    }
    // 三个double相加.
    public double add(double a, double b, double c){
        double sum = a+b+c;
        return sum;
    }
}
class GFG {
    public static void main (String[] args) {
        Addition ob = new Addition();
        int sum2 = ob.add(1,2,3);
        System.out.println("三个int的和 :" + sum2);
        double sum3 = ob.add(1.0,2.0,3.0);
        System.out.println("三个double的和 :" + sum3);
    }
}

输出:

三个int的和 :6
三个double的和 :6.0

方法3:通过更改参数的顺序

import java.io.*;
class mango{
    public void mangoIdentity(String name,  int id){
        System.out.println("mangoName :"+ name +" "+"Id :"+ id);
    }
    public void mangoIdentity(int id, String name){
        System.out.println("mangoName :"+ name +" "+"Id :"+ id);
    }
}
class GFG {
    public static void main (String[] args) {
        mango mango = new mango();
        mango.mangoIdentity("芒果", 1);
        mango.mangoIdentity("文档", 2);
    }
}

输出:

mangoName :芒果 Id :1
mangoName :文档 Id :2

当方法签名相同且返回类型不同时会发生什么?

编译器将给出错误,因为仅返回值不足以使编译器找出必须调用的函数。更多详细信息:Java语言规范:第8.4.2节。仅当两个方法具有不同的参数类型(因此,它们具有不同的签名)时,方法重载才有可能。

import java.io.*;
class Addition
{
    // 两个整数相加.
    public int add(int a, int b)
    {
        int sum = a+b;
        return sum;
    }
    // 三个整数相加.
    public double add(int a, int b)
    {
        double sum = a+b+0.0;
        return sum;
    }
}
class GFG
{
    public static void main (String[] args)
    {
        Addition ob = new Addition();
        int sum1 = ob.add(1,2);
        System.out.println("两个整数的和 :" + sum1);
        int sum2 = ob.add(1,2);
        System.out.println("三个整数的和 :" + sum2);
    }
}

输出:

16: error: method add(int,int) is already defined in class Addition
    public double add(int a, int b)
                  ^
1 error