java 方法的重载
方法的重载:一个类中允许出现一个以上的同名方法,必须保证同名方法的参数列表不同
好处:方便阅读,优化程序设计
重载规则:重载方法名相同,但每个重载方法都必须有一个独一无二的参数类型列表,方法的返回值也可不同
参数个数和类型相同但参数顺序不同也可以区分这两个方法,不过一般情况下不这样做,因为会让代码难以维护
1.基本重载
1 public class MyMethod{ 2 //加法运算 x+y=z 3 public int add(int a,int b){ 4 return a+b; 5 } 6 public double add(double a,double b){ 7 return a+b; 8 } 9 public static void main(String[] args){ 10 MyMethod mymethod = new MyMethod(); 11 int a1 = mymethod.add(1,2); 12 double a2 = mymethod.add(1.2,2.3); 13 } 14 }
2.涉及基本类型的重载
基本类型能从一个"较小"的类型自动提升至一个"较大"的类型,此过程涉及到重载,会有些特殊的地方会混淆
如果有某个重载方法接受int型参数,他就会被调用
如果传入的数据类型(实际参数类型)小于方法中声明的形式参数类型,实际参数类型就会被提升
char类型不同,如果无法找到接收char类型参数的方法,就会把char直接提升至int
如果传入的参数较大,就得通过类型转换来执行窄化转换
3.其他:运算问题
在写重载方法时遇到一个小问题:以上程序没问题,但是重载一个byte和short类型的参数方法时会报错
1 public class MyMethod{ 2 //加法运算 x+y=z 3 public int add(int a,int b){ 4 return a+b; 5 } 6 public byte add(byte a,byte b){ 7 return (byte)(a+b); //必须强制转换,否则报错 8 } 9 public short add(short a,short b){ 10 return (short)(a+b); //必须强制转换,否则报错 11 } 12 public static void main(String[] args){ 13 MyMethod mymethod = new MyMethod(); 14 byte a1 = mymethod.add(1,2); 15 short a1 = mymethod.add(1,2); 16 /* 17 //错误写法 18 byte a = 10; 19 byte b = 20; 20 byte c = a+b; //int+int 21 22 short a = 10; 23 short b = 20; 24 short c = a+b; 25 */ 26 } 27 }
以上程序中在调用byte a1 = mymethod.add(1,2);和short a1 = mymethod.add(1,2);时会报错:可能损失精度
解决方法:进行强制转换 return (byte)(a+b);
原因:算术运算(+,-,*,/,%):在没有出现long类型的情况下,算术运算符两边的数据都会按照int运算,会自动将数据类型提升为int
在算数运算中存在long类型,则全部按照long运算。
posted on 2017-03-05 09:48 想拥有海绵宝宝的微笑 阅读(152) 评论(0) 编辑 收藏 举报