Java方法重载

本文概述

  • 方法重载的优势
  • 方法重载和类型推广
如果一个类有多个方法名称相同但参数不同,它被称为方法重载。
【Java方法重载】如果我们只执行一个操作,有相同名称的方法增加了程序的可读性。
假设你需要执行给定的数字,但可以有任意数量的参数,如果你写的方法如(int,int)两个参数,和b (int,int,int)三个参数就可能很难让你以及其他程序员理解行为的方法,因为它的名称不同。
所以,我们执行方法重载快速找出程序。
方法重载的优势方法重载增加程序的可读性。
重载方法的不同方法
有两种方法可以用java过载的方法
  1. 通过改变参数的数量
  2. 通过改变数据类型
在java中,方法重载是不可能通过改变方法的返回类型。1)方法重载:没有变化。的参数
在本例中,我们创建了两个方法,第一个添加()方法执行的两个数字,第二个添加方法执行的三个数字。
在这个例子中,我们创建静态方法,这样我们不需要创建实例调用方法。
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)方法重载:改变数据类型的参数
在这个例子中,我们创建了两个不同数据类型的方法。第一次添加方法接收两个整数参数和第二次添加方法接收两个双参数。
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

问)为什么方法重载是不可能通过改变方法只返回类型?
在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

11)System.out.println (Adder.add(11日); / /在这里,java如何决定sum()方法应该调用哪个?
注:编译时错误比运行时错误。所以,java编译器编译时错误呈现如果你声明相同的方法有相同的参数。我们可以重载java 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[]

方法重载和类型推广一个类型是提升到另一个隐式如果没有找到匹配的数据类型。让我们理解的概念图下面:
作为显示在上面的图中,字节可以晋升为短,整数、浮点数和双精度数。简单的数据类型可以晋升为int,长,浮点数和双精度数。char数据类型可以晋升为整数,浮点数和双精度数等等。
与TypePromotion方法重载的例子
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

一种类型不是de-promoted隐式例如双不能depromoted任何隐式类型。

    推荐阅读