java中interface是不是繼承Object
阿新 • • 發佈:2019-01-02
疑問描述:
在如下程式碼的時候,不是很理解,為什麼這麼判斷?
很明顯,是要判斷是傳進來的method的宣告類是介面還是實現類,但是為什麼直接用Object來判斷呢?好像一直也沒有去思考過這個問題,好尷尬,於是查閱資料,看看interface是不是繼承Object.
Sun的官方文件TJLS(The Java Language Specification)第9章9.2節關於介面描述如下:
If an interface has no direct superinterfaces, then the interface implicitly
大概翻譯如下:如果一個介面沒有直接頂級父介面,除非在該介面中明確的聲明瞭方法,則會隱含得宣告一套和Object中的方法簽名完全一樣的方法,並且,如果該介面明確宣告一個和Object中用final方法一樣的,則會報編譯時異常。
這樣做的好處是,我們在程式中呼叫介面的那些與Object中具有相同簽名的方法(toString,equal....)時,編譯器不會報錯。但是需要主要的是,是簽名完全一樣的方法,所以,return type也必須和Object裡面的一樣,否則也會報錯。如下:
public interface testInter{ /*String*/ void toString(); /*boolean*/ int equals(Object obj); }