2011-08-21 75 views
2

我看到一個代碼,其中有兩個接口有一些方法與兩個方法具有相同的名稱。然後有一個類實現了這些接口,我認爲它不應該編譯,因爲方法名稱不明確。爲什麼它工作正常。接口實現混亂?

+0

Class1.Method,Class2.Method,這是他們如何不同。沒有歧義。 – atoMerz

+0

是關於PHP或Java的問題嗎? – Mat

+0

@Mat這個問題是通用的,我嘗試了兩種語言。所以我把它標記爲開放以迴應任何社區。 –

回答

2

發生此問題的每種語言都會以不同的方式解決問題。在某些語言中,這可能是一個錯誤; C++就是這樣。但是在Java中,只要這兩種方法具有兼容的異常規範 - 即只要實際上可以實現滿足兩個接口的方法,那麼語言規範就特別允許這樣做。一種方法滿足每個接口,並且一切都很好。詢問該方法屬於哪個接口是毫無意義的;它屬於兩者,或者屬於無。

請注意,您可以通過方法x()獲得一個類,然後使用一個子類來擴展該類,該子類聲明自己實現了一些包含方法x()的接口;孩子會使用繼承的方法自動滿足接口,而接口本身並不知道接口方法。如您所見,Java接口純粹是聲明式的;他們並不關心方法來自哪裏,只是所討論的類包含它們。

我不會說PHP,但也許它是一樣的,但我相信它在一些小細節上有所不同。

+0

感謝您的回答。 –

0

如果方法相同,方法名稱中不會有歧義。

所以,從本質上講,Java沒有問題,因爲實現類只應提供一個實現。