1. 程式人生 > >java中interface是不是繼承Object

java中interface是不是繼承Object

疑問描述:

在如下程式碼的時候,不是很理解,為什麼這麼判斷?


     很明顯,是要判斷是傳進來的method的宣告類是介面還是實現類,但是為什麼直接用Object來判斷呢?好像一直也沒有去思考過這個問題,好尷尬,於是查閱資料,看看interface是不是繼承Object.

    Sun的官方文件TJLS(The Java Language Specification)第9章9.2節關於介面描述如下: 

If an interface has no direct superinterfaces, then the interface implicitly 

declares a public abstract member method m with signature s, return type r, and throws clause t corresponding to each public instance method m with signature s, return type r, and throws clause t declared in Object, unless a method with the same signature, same return type, and a compatible throws 
clause is explicitly declared by the interface. It is a compile-time error if the interface explicitly declares such a method m in the case where m is declared to be final in Object. 

    大概翻譯如下:如果一個介面沒有直接頂級父介面,除非在該介面中明確的聲明瞭方法,則會隱含得宣告一套和Object中的方法簽名完全一樣的方法,並且,如果該介面明確宣告一個和Object中用final方法一樣的,則會報編譯時異常。

     這樣做的好處是,我們在程式中呼叫介面的那些與Object中具有相同簽名的方法(toString,equal....)時,編譯器不會報錯。但是需要主要的是,是簽名完全一樣的方法,所以,return type也必須和Object裡面的一樣,否則也會報錯。如下:

       public interface testInter{  /*String*/ void toString();  /*boolean*/ int equals(Object obj);  }