猿教程 Logo

Java方法重载

如果一个类有多个具有相同名称但参数不同的方法,则称为方法重载。

如果我们只需要执行一个操作,具有相同的方法名称将增加程序的可读性。

假设您必须执行给定数字的添加,但是可以有任何数量的参数,如果您为两个参数编写一个a(int,int)方法,为三个参数编写b(int,int,int) 可能对你和其他程序员来说很难理解该方法的行为,因为它的名称不同。

因此,我们执行方法重载以快速计算出程序。



方法重载的优点

方法重载提高了程序的可读性。)

不同的方法重载方法

有两种方法在java中重载方法

  1. 通过改变参数的数量

  2. 通过更改数据类型

在java中,只改变方法的返回类型是不可能实现方法重载的。

1)方法重载:改变参数

在这个例子中,我们创建了两个方法,第一个add()方法执行两个数字的添加,第二个add方法执行添加三个数字。

在这个例子中,我们创建静态方法,所以我们不需要为调用方法创建实例。

相关实例:

class Adder{
static int add(int a,int b){return a+b;}
static int add(int a,int b,int c){return a+b+c;}
}
class TestOverloading1{
public static void main(String[] args){
System.out.println(Adder.add(11,11));
System.out.println(Adder.add(11,11,11));
}}

输出:

22
33

2)方法重载:更改参数的数据类型

在本示例中,我们创建了两种数据类型不同的方法。 第一个add方法接收两个整数参数,第二个add方法接收两个double参数。

相关实例:

class Adder{
static int add(int a, int b){return a+b;}
static double add(double a, double b){return a+b;}
}
class TestOverloading2{
public static void main(String[] args){
System.out.println(Adder.add(11,11));
System.out.println(Adder.add(12.3,12.6));
}}

输出:

22
24.9

Q)为什么方法重载是不可能仅通过改变方法的返回类型?

在java中,只改变方法的返回类型来实现重载是不可能的,因为模糊。 让我们看看如何可能发生模糊:

class Adder{
static int add(int a,int b){return a+b;}
static double add(int a,int b){return a+b;}
}
class TestOverloading3{
public static void main(String[] args){
System.out.println(Adder.add(11,11));//ambiguity
}}

输出:

Compile Time Error: method add(int,int) is already defined in class Adder

System.out.println(Adder.add(11,11)); //这里,java如何确定应该调用哪个sum()方法?

注意:编译时错误优于运行时错误。 所以,如果你声明相同的方法具有相同的参数,java编译器渲染编译器时间错误。

我们可以重载java main()方法吗?

是的,通过方法重载。 您可以通过方法重载在类中有任意数量的main方法。 但是JVM调用main()方法,它只接收字符串数组作为参数。 让我们看一个简单的例子:

相关实例:

class TestOverloading4{
public static void main(String[] args){System.out.println("main with String[]");}
public static void main(String args){System.out.println("main with String");}
public static void main(){System.out.println("main without args");}
}

输出:

main with String[]

方法重载和类型升级

如果没有找到匹配的数据类型,那么会隐式地将一个类型提升到另一个类型。 让我们通过下面的图来理解这个概念:


如上图所示,字节可以被提升为short,int,long,float或double。 short数据类型可以提升为int,long,float或double。 char数据类型可以提升为int,long,float或double等等。

使用类型提升方法重载的示例

相关实例:

class OverloadingCalculation1{
  void sum(int a,long b){System.out.println(a+b);}
  void sum(int a,int b,int c){System.out.println(a+b+c);}

  public static void main(String args[]){
  OverloadingCalculation1 obj=new OverloadingCalculation1();
  obj.sum(20,20);//now second int literal will be promoted to long
  obj.sum(20,20,20);

  }
}
Output:40
       60

使用类型升级方法重载示例如果找到匹配

如果方法中存在匹配类型参数,则不会执行类型升级。

相关实例:

class OverloadingCalculation2{
  void sum(int a,int b){System.out.println("int arg method invoked");}
  void sum(long a,long b){System.out.println("long arg method invoked");}

  public static void main(String args[]){
  OverloadingCalculation2 obj=new OverloadingCalculation2();
  obj.sum(20,20);//now int arg sum() method gets invoked
  }
}
Output:int arg method invoked

在模糊的情况下使用类型提升方法重载的示例

如果在方法中没有匹配的类型参数,并且每个方法都会促进相同数量的参数,那么会出现歧义。

相关实例:

class OverloadingCalculation3{
  void sum(int a,long b){System.out.println("a method invoked");}
  void sum(long a,int b){System.out.println("b method invoked");}

  public static void main(String args[]){
  OverloadingCalculation3 obj=new OverloadingCalculation3();
  obj.sum(20,20);//now ambiguity
  }
}
Output:Compile Time Error

一种类型不被隐式地去提升,例如double不能被隐含地转换到任何类型。


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Java/method-overloading-in-java.html