赞
踩
方法重载
方法重载表现在方法名相同,但是参数列表不同,返回值类型不同或者访问权限修饰符不同
参数不同:
class A{ int add(int a,int b){ return a+b; } double add(double a, double b){ return a+b; } } public class TextA{ public static void main(String[] args){ A a = new A(); //调用add(int a,int b); System.out.println(a.add(1,2); //调用add(double a, double b); System.out.prinltn(a.add(1.2,2.3)); } }
方法重载的原则
对不同数据完成相同的任务,方法的实现有多重选择,取决于使用者所给的参数如何匹配重载方法中的参数
方法重载的作用
(1)对相同的操作可以使用同一种方法名
(2)有利于理解和调试代码
(3)有利于代码的维护
方法重载的调用
当调用方法的名称相同时,编译器会逐个匹配相对应的参数来调用相对应的方法,如果匹配失败,则编译器报错,称为重载分辨。
public class Main { public double add(int a, int b) { System.out.println("Inside add(int a, int b)"); double s = a + b; return s; } public double add(double a, double b) { System.out.println("Inside add(double a, double b)"); double s = a + b; return s; } public static void main(String[] args) { Main ot = new Main(); int i = 1; int j = 1; double d1 = 10.42; float f1 = 22.3F; float f2 = 24.5F; short s1 = 22; short s2 = 26; ot.add(i, j); //调用add(int,int) //自动类型扩展 ot.add(d1, j); //调用add(doulbe,double) ot.add(i, s1); //调用add(int,int) ot.add(s1, s2); //调用add(int,int) ot.add(f1, f2); //调用add(doulbe,double) ot.add(f1, s2); //调用add(doulbe,double) } }
运行结果:
Inside add(int a, int b)
Inside add(double a, double b)
Inside add(int a, int b)
Inside add(int a, int b)
Inside add(double a, double b)
Inside add(double a, double b)
另外,如果调用方法时没有找到匹配的参数的数据类型,则会隐式地将一个数据类型提升到另一个数据类型(自动类型扩展)
方法重载和自动类型扩展的冲突
有时候参数匹配可能会导致编译器混淆,导致报错
class A{ public double add(int a,double b){ return a+b; } public double add(double a ,int b){ return a+b; } } public class Text{ public static void main(String[] args){ A a = new A(); a.add(2,3);//编译器报错,因为由于自动类型扩展无法分辨该调用哪个方法 a.add(double(2),3);//调用add(double a,int b); a.add(2,double(3));//调用add(int a,double b); } }
方法重载注意事项
1.类中具有相同名称的方法可以使声明的方法,继承的方法,或者两者的组合。
2.方法重载必须是参数列表不同,可以是参数的个数,数据类型,顺序不同,仅仅是参数的名称不同是不行的。
例如:add(int a);和add(int b);这两种方法可以是一种方法(形参的取名是任意的)。
3.构造方法也可以重载。
4.声明为final的方法不能重载。
5.静态方法不能重载。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。