java中重载的方法
如果两个或者更多方法具有相同的名称,但是不同的参数然后调用 method overloading
。
为什么你会这样做(同名但不同的参数)?
让我们举个例子。
你想打印薪水 employee
有时向员工提供奖金,有时它不会。
所以,如果不给奖金,我们可以使用 printSalary(int salary)
方法,如果它提供奖金,那么我们可以使用 printSalary(int salary,int bonus)
因此,两种方法都在做同样的工作,但它们的输入是不同的,因此它将增加程序的可读性。
否则如果我们给出不同的方法名称,它将变得难以理解。
package org.igi.theitroad; public class Employee{ public void printSalary(int salary) { System.out.println("Salary without bonus : "+salary); } public void printSalary(int salary,double bonus) { System.out.println("Salary with bonus : "+(salary+bonus)); } public static void main(String args[]) { Employee e1=new Employee(); //if no bonus provided, we can use this method e1.printSalary(20000); System.out.println("**"); //If bonus provided we can pass to overloaded method and add to salary e1.printSalary(20000, 10000); } }
运行上面的程序时,我们将获取以下输出:
Salary without bonus : 20000 ** Salary with bonus : 30000
方法重载规则:
|参数数量|重载(overloading)方法可以具有不同数量的参数|
| --- - | --- |
|日期类型|重载(overloading)方法可以具有参数的不同数据类型|
|返回类型|返回类型可以更改,但也应该更改任意数量的参数或者数据类型。|
|参数的顺序|如果我们更改了参数序列,那么它也是一个有效的方法重载,所以提供了不同的数据类型参数。 |
|构造函数|可以重载(overloading)|
因此,我们可以使用三种方式重载(overloading)方法:
- 通过改变参数数量
- 通过更改数据类型的参数
- 通过更改参数序列,如果它们是不同的类型
通过改变参数数量
上面我们所采取的示例是此类型。
我们正在重载(overloading)具有不同数量的参数的printsalary()方法。
通过更改数据类型的参数:
在上面的示例中,我们将创建另一个方法,这将将双数据类型作为输入。
package org.igi.theitroad; public class Employee{ public void printSalary(int salary) { System.out.println("Salary without bonus : "+salary); } public void printSalary(int salary,double bonus) { System.out.println("Salary with bonus : "+(salary+bonus)); } public void printSalary(double salary) { System.out.println("Salary without bonus : "+salary); } public static void main(String args[]) { Employee e1=new Employee(); //if no bonus provided, we can use this method //will call printSalary(int) e1.printSalary(20000); Employee e2=new Employee(); //will call printSalary(double) e2.printSalary(30000.5); System.out.println("**"); //If bonus provided we can pass to overloaded method and add to salary e1.printSalary(20000, 10000); } }
所以其中我们介绍了一种新的方法,将双重数据类型作为输入。
这也是有效的方法重载。
通过更改参数序列,如果它们是不同的数据类型
我们可以介绍一种新方法 printSalary(double bonus,int salary)
。
所以通过改变论证顺序,我们可以重载(overloading)方法。
package org.igi.theitroad; public class Employee{ public void printSalary(int salary) { System.out.println("Salary without bonus : "+salary); } public void printSalary(int salary,double bonus) { System.out.println("Salary with bonus : "+(salary+bonus)); } public void printSalary(double bonus,int salary) { System.out.println("Salary with bonus : "+(salary+bonus)); } public static void main(String args[]) { Employee e1=new Employee(); //if no bonus provided, we can use this method e1.printSalary(20000); System.out.println("**"); //If bonus provided we can pass to overloaded method and add to salary e1.printSalary(20000, 10000);< //Changing sequence e1.printSalary(2000.5, 20000); } }
为什么我们只能改变返回类型?
如果我们只更改返回类型,编译器将变得模糊,以确定调用哪种方法。
这就是为什么无法更改返回类型。
什么是静态绑定?
编译Java程序时。
在编译过程中,编译器绑定方法调用实际方法。
这称为静态绑定,并且在编译时发生重载绑定的方法。