2日で私はJavaで試験を受けました、そして私はこの質問への答えを理解することができません:
class ClassA {
public String foo(Integer x , int y) {
return "Integer, int";
}
public String foo(int x, Double y) {
return "int, Double";
}
public String foo(Number x, Number y) {
return "Number, Number";
}
public String foo(Object x, Object y) {
return "Object, Object";
}
public static void main(String... args) {
ClassA a = new ClassA();
System.out.print(a.foo(5, 1.2f) + " ");
System.out.println(a.foo(null, null));
}
}
出力は何ですか?
答えは次のとおりです。
Number, Number Number, Number
私は、Javaが常に最も指定されたメソッドを選択することを知っています。そのため、メソッドではなくメソッドa.foo(null,null);を呼び出します。しかし、なぜメソッドではなくメソッドも呼び出すのですか?Number,NumberObject,Objecta.foo(5,1.2f);Number,Numberint,Double
しかし、役立つかもしれないもう1つのこと:fafter1.2を削除すると、呼び出しは次のよう
a.foo(5,1.2);
になります。コンパイラエラーが発生し、Number,Numberとint,Doubleメソッドのどちらかを選択できません。
あなたたちが私にそれを説明することができれば、本当に役に立ちます:)