2

(コンパイラによって)一方を他方よりも優先する正式な理由は何ですか?バイトなどに最初のものを選択する理由。intはバイトを表すことができますが、floatも表すことができます。なぜそれが正式なのですか?

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言語仕様では、これを次のように定義しています。

複数のメンバーメソッドがアクセス可能であり、メソッド呼び出しに適用できる場合は、実行時メソッドディスパッチの記述子を提供するために1つを選択する必要があります。Javaプログラミング言語は、最も具体的な方法が選択されるという規則を使用します。

非公式の直感では、最初のメソッドによって処理された呼び出しがコンパイル時の型エラーなしで他のメソッドに渡される可能性がある場合、1つのメソッドは別のメソッドよりも具体的です。

あなたの場合、intメソッドはメソッドよりも具体的です。これは、が暗黙的にに変換される可能性があるfloatためですが、その逆はできません。intfloat

于 2012-10-27T22:47:30.917 に答える
2

Java言語仕様がそう言っているからです。

于 2012-10-27T22:46:39.617 に答える