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);

    }
}
4

2 回答 2

5

Java 语言规范对此进行了如下定义:

如果多个成员方法既可访问又适用于方法调用,则有必要选择一个为运行时方法分派提供描述符。Java 编程语言使用选择最具体方法的规则。

非正式的直觉是,如果第一个方法处理的任何调用可以传递给另一个方法而不会出现编译时类型错误,那么一个方法比另一个方法更具体。

在您的情况下,该int方法比该float方法更具体,因为 aint可以隐式转换为 a float,但反之则不行。

于 2012-10-27T22:47:30.917 回答
2

因为Java 语言规范是这么说的。

于 2012-10-27T22:46:39.617 回答