2012-10-27 31 views
2

偏好一个方法到另一个(通过编译器)的正式原因是什么? 为什么它选择字节等第一个我知道int可以代表字节,但也浮动。它为什么如此正式?什么标准编译器选择重载方法之一

public class MethodCurrier { 

    public void setValue(int wrt){//naglowek 
     System.out.println("Typ int "+ wrt); 
    } 
    public void setValue(float wrt){//naglowek 
     System.out.println("Typ float "+ wrt); 
    } 
    public static void main(String[] args) { 
     MethodCurrier currier = new MethodCurrier(); 
     currier.setValue(4);//int 
     currier.setValue(2.3f);//float 
     currier.setValue('c');//char 
     currier.setValue((byte)4); 

    } 
} 
+1

面试问题?你有工作吗? –

回答

5

Java语言规范defines此如下:

如果不止一个成员方法既方便和适用于方法调用,就必须选择一个提供运行时的描述符方法调度。 Java编程语言使用选择最具体方法的规则。

非正式的直觉是,如果由第一个方法处理的任何调用可以传递到另一个没有编译时类型错误的方法,那么其中一个方法比另一个更具体。

在你的情况下,该int方法比float方法更具体的,因为一个int可以implictly转换为float,但是反之则不行。

相关问题