先决条件:重载
Java可以用不同的方法签名来区分方法。也就是说,在同一个类中,方法可以有相同的名称,但是有不同的形参列表(即形参的数量、形参的顺序和形参的数据类型)。
- 重载方法根据作为参数传递给方法的参数的数量和类型进行区分。
- 你不能定义多个具有相同名称, 顺序和参数类型的方法。这将是编译器错误。
- 区分重载方法时, 编译器不考虑返回类型。但是你不能声明具有相同签名和不同返回类型的两个方法。它将引发编译时错误。
如果两个方法都具有相同的参数类型, 但返回类型不同, 则不可能。(Java SE 8 Edition, §8.4.2)
如果我们需要以不同的方式(即针对不同的输入)执行相同类型的操作。在下面描述的示例中, 我们对不同的输入进行加法运算。很难为单个动作找到许多不同的有意义的名称。
进行重载方法的不同方法
方法重载可以通过更改来完成:
- 两种方法中的参数数量。
- 方法的参数的数据类型。
- 方法的参数顺序。
import java.io.*;
class Addition{//adding two integer values.
public int add( int a, int b){int sum = a+b;
return sum;
}//adding three integer values.
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( "sum of the two integer value :" + sum1);
int sum2 = ob.add( 1 , 2 , 3 );
System.out.println( "sum of the three integer value :" + sum2);
}
}
【Java中方法重载的不同方法有哪些()】输出如下:
sum of the two integer value :3
sum of the three integer value :6
方法2:通过更改参数的数据类型
import java.io.*;
class Addition{//adding three integer values.
public int add( int a, int b, int c){int sum = a+b+c;
return sum;
}//adding three double values.
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( "sum of the three integer value :" + sum2);
double sum3 = ob.add( 1.0 , 2.0 , 3.0 );
System.out.println( "sum of the three double value :" + sum3);
}
}
输出如下:
sum of the three integer value :6
sum of the three double value :6.0
方法3:通过更改参数的顺序
import java.io.*;
class Geek{public void geekIdentity(String name, int id){System.out.println( "geekName :" + name + " " + "Id :" + id);
}public void geekIdentity( int id, String name){System.out.println( "geekName :" + name + " " + "Id :" + id);
}
}class GFG {
public static void main (String[] args) {Geek geek = new Geek();
geek.geekIdentity( "Mohit" , 1 );
geek.geekIdentity( "shubham" , 2 );
}
}
输出如下:
geekName :Mohit Id :1
geekName :shubham Id :2
当方法签名相同且返回类型不同时会发生什么?
编译器将给出错误, 因为仅返回值不足以使编译器找出必须调用的函数。更多细节:Java语言规范:第8.4.2节。
仅当两个方法具有不同的参数类型(因此, 它们具有不同的签名)时, 方法重载才是可能的。
//Example to show error when method signature is same
//and return type is different.
import java.io.*;
class Addition
{
//adding two integer value.
public int add( int a, int b)
{int sum = a+b;
return sum;
}//adding three integer value.
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( "sum of the two integer value :" + sum1);
int sum2 = ob.add( 1 , 2 );
System.out.println( "sum of the three integer value :" + sum2);
}
}
输出如下:
16: error: method add(int, int) is already defined in class Addition
public double add(int a, int b)
^
1 error
相关文章:
- Java中的方法重载和Null错误
- 我们可以在Java中重载或重写静态方法吗?
推荐阅读
- 用Java读取文本文件的不同方法有哪些()
- Java中整数到字符串转换的不同方法有哪些()
- 在C和C++中将变量声明为常量的不同方法
- 用Java创建对象的不同方法有哪些()
- 不同类型的RAM(随机存取存储器)
- 不同类型的聚类算法详细介绍
- 矩阵的不同运算快速介绍
- 用C++ STL复制的不同方法std::copy()、copy_n()、copy_if()、copy_backward()
- #yyds干货盘点#JS是单线程的,那么JS是如何实现并发请求的()