码迷,mamicode.com
首页 > 编程语言 > 详细

Java 方法重载

时间:2017-10-08 16:09:21      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:字符串   public   ati   整数   sts   关于   logs   方便   tail   

  什么是方法重载?

  方法重载的要求是两同一不同:同一类中方法名相同,参数列表不同。至于方法的其他部分,如方法返回值类型、修饰符等,与方法重载没有任何关系。

 

  为什么要用方法重载?

  重载的目的是方便程序员调用方法。比如,System.out.println()这个函数是用来输出的,当输出的是整数时是用这个方法,当输出一个字符串时还是用这个方法。根据传入参数的不同,自动找到匹配的方法。

 

  方法重载是编译时多态,在编译时确定方法签名。

 1 import java.util.ArrayList;
 2 import java.util.LinkedList;
 3 import java.util.List;
 4 import java.util.concurrent.CopyOnWriteArrayList;
 5 
 6 public class TestOverLoadMethod {
 7 
 8     public void testOverLoad(ArrayList<String> arrayList){
 9         System.out.println("ArrayList");
10     }
11 
12     public void testOverLoad(LinkedList<String> linkedList){
13         System.out.println("LinkedList");
14     }
15 
16     public void testOverLoad(List<String> list){
17         System.out.println("list");
18     }
19 
20     public static void main(String[] args) {
21         List<List<String>> lists = new ArrayList<List<String>>();
22         lists.add(new ArrayList<String>());
23         lists.add(new LinkedList<String>());
24         lists.add(new CopyOnWriteArrayList<String>());
25 
26         TestOverLoadMethod obj = new TestOverLoadMethod();
27         for (List<String> list : lists) {
28             obj.testOverLoad(list);
29         }
30     }
31 
32 }

  结果:

1 list
2 list
3 list

  虽然运行时才确定调用哪个方法,但是编译时确定方法签名。因为编译器看到obj.testOverLoad(list);执行时list的声明类型是List<String>,所以这个调用生成的方法签名是testOverLoad(List list),在运行时通过反射调用了这个方法。

  

  参考资料

  Java方法重载规则

  为什么要用到重载

  关于静态方法为什么不能被重写的一点思考以及overload的一些坑。

Java 方法重载

标签:字符串   public   ati   整数   sts   关于   logs   方便   tail   

原文地址:http://www.cnblogs.com/WJQ2017/p/7637531.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!