java中重载的方法

时间:2020-02-23 14:35:27  来源:igfitidea点击:

如果两个或者更多方法具有相同的名称,但是不同的参数然后调用 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程序时。
在编译过程中,编译器绑定方法调用实际方法。
这称为静态绑定,并且在编译时发生重载绑定的方法。