類AbstractInterruptibleChannel實現InterruptibleChannel及其超級接口Channel。爲什麼這個類實現了兩個接口,其中一個接口已經從一個共同的父接口擴展出來?
背後有這樣的理由嗎?
或這應該是什麼優勢?
類AbstractInterruptibleChannel實現InterruptibleChannel及其超級接口Channel。爲什麼這個類實現了兩個接口,其中一個接口已經從一個共同的父接口擴展出來?
背後有這樣的理由嗎?
或這應該是什麼優勢?
你是正確的,這實際上是多餘的。
這樣做的唯一原因:您可能擔心子接口在未來的某個點上發生更改 - 不再擴展該接口。
通過明確地放下這兩個接口,您將受到保護以防止該更改(是的,該類對兩個接口都表示「實現」)。
但是,這仍然是一個相當罕見,令人驚訝的結構,我不會使用任何東西。
行爲是一樣的。
我認爲這個意圖是開發人員的信息,不需要輸入absract類定義來理解接口是間接實現的。
AbstractInterruptibleChannel
是2件事:一個chanel(Channel
)和一個可中斷的(InterruptibleChannel
)。聲明這兩個接口明確強調它。
對於自定義類,它可能看起來只是多餘的和無助的,但對於源代碼被瀏覽並讀取數百萬次的jdk類,它可能不是。
這是在整個JDK實現中遵循的某種無證慣例。例如,'ArrayList'擴展'AbstractList'並實現'List',即使'AbstractList'已經被聲明爲List的實現。這個想法似乎是,如果有人從父類中刪除'implements ...'部件,將會拋出編譯時錯誤,因爲一個或多個子類明確要求實現多個接口中的一個被刪除。 – manish
這只是爲了清晰起見,國際海事組織 –