标签:字符串 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),在运行时通过反射调用了这个方法。
参考资料
关于静态方法为什么不能被重写的一点思考以及overload的一些坑。
标签:字符串 public ati 整数 sts 关于 logs 方便 tail
原文地址:http://www.cnblogs.com/WJQ2017/p/7637531.html