爪哇 2博客
  爪哇 2博客

爪哇 中的方法重载

If two or more methods have same name , but different argument then it is called method overloading.

为什么要这样做(名称相同但参数不同)?

Lets take an example. You want to print 薪水 of employee and sometimes company gives 奖金 to their employee and sometimes it don’t.So If company don’t give 奖金 then we can use printSalary(int 薪水 ) method and if it provides 奖金 then we can use printSalary(int 薪水 ,int 奖金 ) so both methods are doing same work but their inputs are different so it will increase readability of programs.Otherwise if you give different methods name,it will become hard to understand.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
组织 . Arpit . 爪哇 2blog ;
 
上市 雇员 {
   
    上市 虚空 printSalary( 整型 薪水 )
    {
        系统 .. 打印 (“没有奖金的工资:”+ 薪水 );
       
    }
   
    上市 虚空 printSalary( 整型 薪水 , 奖金 )
    {
        系统 .. 打印 (“加薪的工资:”+( 薪水 + 奖金 ));
       
    }
    上市 静态的 虚空 主要 ( args [])
    {
       
        雇员 e1= 雇员 ();
        //如果没有提供奖金,我们可以使用此方法
        e1.printSalary(20000);
        系统 .. 打印 (“ **********************”);
        //如果提供了奖金,我们可以传递给重载方法并增加薪水
        e1.printSalary(20000, 10000);
    }
}
 

当您运行上述程序时,将得到以下输出:

工资无奖金:20000
**********************
奖金加薪:30000

方法重载规则:

参数数 重载的方法可以具有不同数量的参数
日期类型 重载方法的参数可以具有不同的数据类型
返回类型 返回类型可以更改,但参数数量或参数数据类型也应更改。
参数顺序 如果您更改参数序列,那么如果您具有不同的数据类型参数,它也是有效的方法重载。
建设者 可以超载

因此,您可以使用三种方式重载方法:

  1. 通过更改参数数量
  2. 通过更改参数的数据类型
  3. 如果参数的类型不同,则通过更改其顺序

通过更改参数数量

上面的例子是这种类型的。我们正在使用不同数量的参数重载printSalary()方法。

通过更改参数的数据类型:

在上面的示例中,我们将创建另一个方法,该方法将双精度数据类型作为输入。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
组织 . Arpit . 爪哇 2blog ;
上市 雇员 {
   
    上市 虚空 printSalary( 整型 薪水 )
    {
        系统 .. 打印 (“没有奖金的工资:”+ 薪水 );
       
    }
   
    上市 虚空 printSalary( 整型 薪水 , 奖金 )
    {
        系统 .. 打印 (“加薪的工资:”+( 薪水 + 奖金 ));
       
    }
 
  上市 虚空 printSalary( 薪水 )    {
        系统 .. 打印 (“没有奖金的工资:”+ 薪水 );
       
    }
 
    上市 静态的 虚空 主要 ( args [])
 
    {
       
          雇员 e1= 雇员 ();
        //如果没有提供奖金,我们可以使用此方法
        //将调用printSalary(int)
        e1.printSalary(20000);
         雇员 e2= 雇员 ();
        //将调用printSalary(double)
        e2.printSalary(30000.5);
         系统 .. 打印 (“ **********************”);
        //如果提供了奖金,我们可以传递给重载方法并增加薪水
        e1.printSalary(20000, 10000);
    }
}
 
 因此在这里我们引入了一种新方法,该方法以double数据类型作为输入,这也是有效的方法重载。

如果数据类型不同,则通过更改参数顺序

We can 整型 roduce a 新 method printSalary(double 奖金 ,int 薪水 ). so by changing order of argument we can overload method.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
组织 . Arpit . 爪哇 2blog ;
 
上市 雇员 {
   
    上市 虚空 printSalary( 整型 薪水 )
    {
        系统 .. 打印 (“没有奖金的工资:”+ 薪水 );
       
    }
   
    上市 虚空 printSalary( 整型 薪水 , 奖金 )
    {
        系统 .. 打印 (“加薪的工资:”+( 薪水 + 奖金 ));
       
    } 
  上市 虚空 printSalary( 奖金 , 整型 薪水 )
    {
        系统 .. 打印 (“加薪的工资:”+( 薪水 + 奖金 ));
       
    }
 
    上市 静态的 虚空 主要 ( args [])
    {
       
        雇员 e1= 雇员 ();
        //如果没有提供奖金,我们可以使用此方法
        e1.printSalary(20000);
        系统 .. 打印 (“ **********************”);
        //如果提供了奖金,我们可以传递给重载方法并增加薪水
        e1.printSalary(20000, 10000);<
      //变更顺序
        e1.printSalary(2000.5, 20000);
    }
 
}
 

为什么我们可以’只能更改返回类型吗?

 如果仅更改返回类型,编译器将无法确定要调用的方法,这将变得很模糊,这就是为什么您不能仅更改返回类型的原因。

什么是静态绑定?

编译Java程序时。在编译过程中,编译器将方法调用绑定到实际方法。这就是所谓的 静态绑定 方法重载绑定发生在编译时。

分享这个

作者

关注作者

相关文章

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

订阅我们的新闻

获取质量教程到您的收件箱。现在订阅。


成为朋友

©2020 爪哇 2博客