2016-07-27 121 views
0

如果我聲明我的對象實現了一個接口,但未能實現這些方法,那麼當我編譯我的代碼時,會出現編譯器錯誤。 java編譯器如何知道我沒有實現接口的所有方法?java編譯器如何檢查接口中的所有方法是否都已實現?

+2

它同時訪問的接口和類。爲什麼不知道? – resueman

+0

這個問題類似於問:「編譯器如何知道字符串文字不能分配給int變量?」 – isnot2bad

+0

@resueman我在找更深的解釋。例如,由於接口是抽象類型,因此如何完成類型檢查以及編譯器代表的接口如何執行這些檢查。 – kurryt

回答

1

java編譯器如何知道我沒有實現接口的所有方法?

它知道你的類已經實現的所有方法,因爲它已經在編譯過程中找到並分析它們。

它知道所有的所有類的父類和接口中定義的,因爲這些方法:

  1. 它要麼只是編譯他們的源代碼,或加載自己的「.class」文件,和

  2. 它已經分析了接口/類並找出了需要由你的類實現哪些方法。

然後比較兩組方法。 (請注意,方法不需要完全相同,例如,實際的方法可以返回接口中方法返回類型的子類型,設置的比較需要考慮到這一點。)


(其實,這只是一個方法做這項檢查。一個實際的Java編譯器可能會做不同的檢查了一下。)

+0

這是一個很好的答案,可以完成此任務......在Java中,接口是一種抽象類型,它是一組具有定義明確且相互一致的語義的操作。 Java編譯器有一個類型檢查器,它確保程序服從該語言的類型兼容性規則。因此,類型檢查器只會檢查類是否具有方法簽名,並具有適當的返回類型,如果沒有,則返回錯誤。資料來源:http://www.cs.columbia.edu/~aho/cs4115/Lectures/15-03-23.html – kurryt

相關問題