先决条件:重载
Java可以用不同的方法签名来区分方法。也就是说,在同一个类中,方法可以有相同的名称,但是有不同的形参列表(即形参的数量、形参的顺序和形参的数据类型)。
- 重载方法根据作为参数传递给方法的参数的数量和类型进行区分。
- 你不能定义多个具有相同名称, 顺序和参数类型的方法。这将是编译器错误。
- 区分重载方法时, 编译器不考虑返回类型。但是你不能声明具有相同签名和不同返回类型的两个方法。它将引发编译时错误。
如果两个方法都具有相同的参数类型, 但返回类型不同, 则不可能。(Java SE 8 Edition, §8.4.2)
为什么我们需要方法重载?
如果我们需要以不同的方式(即针对不同的输入)执行相同类型的操作。在下面描述的示例中, 我们对不同的输入进行加法运算。很难为单个动作找到许多不同的有意义的名称。
进行重载方法的不同方法
方法重载可以通过更改来完成:
- 两种方法中的参数数量。
- 方法的参数的数据类型。
- 方法的参数顺序。
方法1:通过更改参数的数量。
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);
}
}
输出如下:
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中重载或重写静态方法吗?
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
评论前必须登录!
注册