Java 方法重载
 
 
 如果未找到匹配的数据类型,则将一种类型隐式提升为另一种类型。让我们用下面的图来理解这个概念: 
 
 
 在上图中,字节可以提升为short,int,long,float或double。 short数据类型可以提升为int,long,float或double。可以将char数据类型提升为int,long,float或double等。
 
使用TypePromotion重载方法的示例
 
 
  
   class OverloadingCalculation1{
     void sum(int a,long b){
         System.out.println(a+b);
     }
     void sum(int a,int b,int c){
         System.out.println(a+b+c);
     }
     public static void main(String args[]){
         OverloadingCalculation1 obj=new OverloadingCalculation1();
         obj.sum(20,20);
         //now second int literal will be promoted to long  obj.sum(20,20,20);
     }
 }
  
 
 
  
 
 
如果发现匹配项,则使用类型升级的方法重载示例
 
 如果方法中存在匹配的类型参数,则不执行类型升级。
 
 
  
   class OverloadingCalculation2{
     void sum(int a,int b){
         System.out.println("int arg method invoked");
     }
     void sum(long a,long b){
         System.out.println("long arg method invoked");
     }
     public static void main(String args[]){
         OverloadingCalculation2 obj=new OverloadingCalculation2();
         obj.sum(20,20);
     //now int arg sum() method gets invoked }
 }
  
 
 
  
 
  
   Output:int arg method invoked
  
 
 
  
在出现歧义的情况下使用类型提升的方法重载示例
 
 如果方法中没有匹配的类型参数,并且每个方法都提升了相似数量的参数,模棱两可。
 
 
  
   class OverloadingCalculation3{
     void sum(int a,long b){
         System.out.println("a method invoked");
     }
     void sum(long a,int b){
         System.out.println("b method invoked");
     }
     public static void main(String args[]){
         OverloadingCalculation3 obj=new OverloadingCalculation3();
         obj.sum(20,20);
     //now ambiguity }
 }
  
 
 
  
 
  
   Output:Compile Time Error
  
 
 
  
 没有隐式取消推广一种类型,例如,不能将double隐式取消推广为任何类型。