想拥有海绵宝宝的微笑

导航

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编辑  收藏  举报