3 回答
TA貢獻1810條經驗 獲得超5個贊
Java對重載方法使用靜態綁定,而對重載方法使用動態綁定。在您的示例中,equals方法被重載(與Object.equals()具有不同的參數類型),因此所調用的方法在編譯時綁定到引用類型。
這里一些討論
它是equals方法的事實并不重要,除了重載而不是覆蓋它是一個常見錯誤之外,您已經根據面試中對問題的答案意識到了這一點。
編輯:這里也是一個很好的描述。本示例顯示了與參數類型有關的類似問題,但是是由同一問題引起的。
我相信,如果綁定實際上是動態的,則在任何情況下調用方和參數都是Test實例的情況都將導致調用重寫的方法。因此,t3.equals(o1)將是唯一無法打印的情況。
TA貢獻1824條經驗 獲得超5個贊
的equals方法Test不會覆蓋的equals方法java.lang.Object??磪殿愋?!所述Test類被重載equals用一個接受的方法Test。
如果equals要覆蓋該方法,則應使用@Override批注。這將導致編譯錯誤指出此常見錯誤。
TA貢獻1852條經驗 獲得超1個贊
有趣的是,在Groovy代碼(可以將其編譯為類文件)中,除一個調用外,所有調用都將執行print語句。(將測試與對象進行比較的人顯然不會調用Test.equals(Test)函數。)這是因為Groovy DOES完全進行了動態類型化。這是特別令人感興趣的,因為它沒有任何顯式動態鍵入的變量。我已經在幾個地方讀到了這被認為是有害的,因為程序員期望使用groovy來完成Java任務。
添加回答
舉報
