Java 方法重载

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 方法重载相关的知识,希望对你有一定的参考价值。

  什么是方法重载?

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

 

  为什么要用方法重载?

  重载的目的是方便程序员调用方法。比如,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 方法重载的主要内容,如果未能解决你的问题,请参考以下文章

java基础3-重载+命令行传参+递归+数组+排序

Java 基础语法方法的使用

10方法的定义和重载和递归

导航架构片段重载问题

导航架构片段重载问题

JavaSE 方法的使用