2017-04-27 71 views
1

類AbstractInterruptibleChannel實現InterruptibleChannel及其超級接口Channel。爲什麼這個類實現了兩個接口,其中一個接口已經從一個共同的父接口擴展出來?

背後有這樣的理由嗎?

或這應該是什麼優勢?

Diagram

+0

這是在整個JDK實現中遵循的某種無證慣例。例如,'ArrayList'擴展'AbstractList'並實現'List',即使'AbstractList'已經被聲明爲List的實現。這個想法似乎是,如果有人從父類中刪除'implements ...'部件,將會拋出編譯時錯誤,因爲一個或多個子類明確要求實現多個接口中的一個被刪除。 – manish

+0

這只是爲了清晰起見,國際海事組織 –

回答

0

你是正確的,這實際上是多餘的。

這樣做的唯一原因:您可能擔心子接口在未來的某個點上發生更改 - 不再擴展該接口。

通過明確地放下這兩個接口,您將受到保護以防止該更改(是的,該類對兩個接口都表示「實現」)。

但是,這仍然是一個相當罕見,令人驚訝的結構,我不會使用任何東西。

0

行爲是一樣的。
我認爲這個意圖是開發人員的信息,不需要輸入absract類定義來理解接口是間接實現的。
AbstractInterruptibleChannel是2件事:一個chanel(Channel)和一個可中斷的(InterruptibleChannel)。聲明這兩個接口明確強調它。
對於自定義類,它可能看起來只是多餘的和無助的,但對於源代碼被瀏覽並讀取數百萬次的jdk類,它可能不是。

相關問題