JAVA方法重载
[TOC]
JAVA方法重载
什么是方法重载
方法重载特点
方法名必须一致
形参列表必须不一致
- 参数类型
- 参数数量
参数顺序不一致(参数类型一致时)
例
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 39 40 41
| public void m1() { System.out.println("m1()"); };
public void m1(byte b) { System.out.println("m1(byte)"); }; public void m1(short s) { System.out.println("m1(short)"); };
public void m1(int i) { System.out.println("m1(int)i"); }; public void m1(int a) { System.out.println("m1(int)a"); }
public int m1() { System.out.println("m1()"); return 1; };
public void m1(String str) { System.out.println("m1(String)"); } public void m1(String str,int i) { System.out.println("m1(String int)"); }
public void m1(int a,double d) { System.out.println("m1(int double)"); } public void m1(double d,int a) { System.out.println("m1(double int)"); }
|
与返回值类型无关,与访问修饰符无关,与异常无关
注意事项
编译时候,确定要执行的是哪个重载方法
参数不同,执行的重载方法会有差异
执行重载方法,参数匹配原则。
先精确匹配,再向上匹配。(当实参给形参赋值的时候会涉及到类型的自动提升)
1 2 3 4 5 6 7 8 9 10 11 12
| public void m1() { System.out.println("m1()"); }; public void m1(byte b) { System.out.println("m1(byte)"); }; public void m1(short s) { System.out.println("m1(short)"); }; public void m1(int i) { System.out.println("m1(int)"); };
|
执行Main函数方法
1 2 3
| byte b = 1; Object o = new Object(); o.m1(b);
|
实际输出为
当取消方法 public void m1(byte b)
重载时候再次执行将会输出 m1(short)
,发生类型自动提升转换,由 byte
转为 short
;同理继续取消 public void m1(short s)
方法会输出 m1(int)
。
参数避免类型的混淆
1 2 3 4 5 6 7
| public void m1(int a,double d) { System.out.println("m1(int double)"); } public void m1(double d,int a) { System.out.println("m1(double int)"); }
|
执行Main方法
1 2 3 4
| Object o = new Object(); o.m1(1.1, 1); o.m1(1, 1.1); o.m1(1.1, 1.1);
|
则无法运行,java虚拟机无法找到匹配的方法。
对于构造函数的“重载原则”
构造函数除声明特殊外,函数重载规则与上述基础函数重载规则相同。