📅  最后修改于: 2020-03-30 14:56:27             🧑  作者: Mango
先决条件: 重载
Java可以区分具有不同方法签名的方法。也就是说,方法可以具有相同的名称,但在同一类中具有不同的参数列表(即参数的数量,参数的顺序和参数的数据类型)。
为什么我们需要方法重载?
如果我们需要以不同的方式(即针对不同的输入)执行相同类型的操作。在下面描述的示例中,我们对不同的输入进行加法运算。很难为单个动作找到许多不同的有意义的名称。
进行方法重载的不同方法
方法重载可以通过更改:
方法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