Java中方法重载的不同方法有哪些?

先决条件:重载

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中重载或重写静态方法吗?

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

来源:

https://www.srcmini02.com/69496.html

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?