JAVA总结之方法重载

问题描述:

  方法重载(overload)是一种Java语法现象,指在一个类内部出现了多个方法名相同,但是参数列表(参数的类型,个数,顺序)不同的方法。Java的方法重载调用会更具参数类型有自动识别调用那个方法。方法重载,可以增强代码的可维护性,为使用者带来更方便。

  方法重载必须遵守两个规则:

    1.参数列表必须不同。

    2.返回值类型不受限制,可以不同。

  下面附上测试代码样例:

 1 package com.test;
 2 
 3 public class TestOverload {
 4 
 5     /**
 6      * @param args
 7      * 方法重载测试样例
 8      */
 9     public static void main(String[] args) {
10         // TODO Auto-generated method stub
11         double llp1 = llp(1,2);
12         /*
13          * 由于int会向下转型成double,所以不会报错。
14          * 调用:double com.test.TestOverload.llp(double i, double j)
15          */
16         double llp2 = llp(1.0,2);
17         double llp3 = llp(1.0,2.0);
18         double atp1 = atp(1,2.0);
19         double atp2 = atp(1.0,2);
20         /*
21          * double atp3 = atp(1.0,2.0);
22          * 由于没有atp(double,double)的方法,所以这里会报错
23          * The method atp(double, int) in the type TestOverload is not applicable for the arguments (double, double)
24          */
25         /*
26          * double atp3 = atp(1,2);
27          * int会自动向上转型成double,但是由于重载方法有atp(int,double)和atp(double,int),
28          * 导致这方法不知道怎么转,模棱两可的,所以报错
29          * The method atp(int, double) is ambiguous for the type TestOverload
30          */
31     }
32     
33     public static double llp(int i, int j){
34         System.out.println("调用:llp(int i, int j)");
35         return 1.0;
36     }
37     public static double llp(double i, double j){
38         
39         System.out.println("调用:llp(double i, double j)");
40         return 1.0;
41     }
42     /*
43      * 这里只有放回类型不同,不满足重载条件,报错
44      * Duplicate method llp(int, int) in type TestOverload
45      * public static double llp(int i, int j){}
46      */
47     public static double atp(int a, double b){
48         System.out.println("调用:atp(int a, double b)");
49         return 1.0;
50     }
51     public static double atp(double a, int b){
52         System.out.println("调用:atp(double a, int b)");
53         return 1.0;
54     }
55 }

控制台输出数据:

调用:llp(int i, int j)
调用:llp(double i, double j)
调用:llp(double i, double j)
调用:atp(int a, double b)
调用:atp(double a, int b)

 

posted @ 2017-02-09 10:43  冰西瓜先生  阅读(354)  评论(0编辑  收藏  举报