我有一種行爲,我不明白在Java中重載。使用Java中的接口重載方法
這裏是我的代碼:
interface I {}
class A implements I {}
class B {
public void test(I i) {}
public void test (A a) {}
}
當我調用下面一行:
I a = new A();
b.test(a);
我想調用的方法是test(A)
但明顯這是test(I)
。
我不明白爲什麼。在運行時我的變量a
是甲甚至A繼承I.
http://en.wikipedia.org/wiki/Multiple_dispatch –
因爲這個決定是在編譯時完成的 - 並且在編譯時沒有辦法知道'a'是否是'A'或其他東西(例如它可能取決於用戶輸入)。可以肯定的是'a'將會是'I'。 – assylias