2012-05-10 35 views
2

看看下面的代碼:Java - 如何處理兼容參數的方法覆蓋?

​​

因爲兩個doStuff()方法將採取阿爸的說法,目前尚不清楚哪一個會被調用。 Java編譯器和/或JVM如何處理這個問題?

+7

既然你已經有了代碼,*當你試過它時發生了什麼* *?把這些信息併入到帖子(標題和正文)中,並用它來改進對該主題的搜索... – 2012-05-10 03:53:46

+0

對不起,我想我正在用錯誤的術語搜索。另外,你是對的,我應該試着編譯它。我不知道爲什麼我在寫這本書時沒有發生這種情況。 – Riking

回答

4

簡單。由於含糊不清的引用,此代碼無法編譯。

$ javac MainThingy.java 
MainThingy.java:4: reference to doStuff is ambiguous, both method doStuff(InterfaceA) in MainThingy and method doStuff(InterfaceB) in MainThingy match 
     MainThingy.doStuff(abObj); 
       ^
1 error 
+1

它也不會編譯,因爲doStuff不會返回int。 –

+0

第2部分)確定/選擇重載時,JVM扮演什麼角色(如果有的話)? – 2012-05-10 04:01:15

+0

Java語言規範精確詳細地規定了所有的過載行爲。 JVM實現它。 – Asaph