2017-04-27 1 views
1

クラスAbstractInterruptibleChannelは、InterruptibleChannelとそのスーパーインタフェースチャネルの両方を実装します。このクラスが2つのインターフェイスを実装する理由(共通の親から既に拡張されているインターフェイス)

これには何らかの理由がありますか?

またはこれの利点は何ですか?あなたが正しい

Diagram

+0

これは、JDK実装全体を通して行われている、文書化されていない規約です。例えば、 'AbstractList'はすでに' List'の実装であると宣言されていますが、 'ArrayList'は' AbstractList'を拡張し、 'List'を実装します。アイデアは、もし誰かが 'implements ...'部分を親クラスから削除すると、1つ以上の子クラスが明示的に1つ以上のインタフェースの実装を削除する必要があるため、コンパイル時エラーがスローされるようです。 – manish

+0

わかりやすくするために、IMO –

答えて

0

が、これは実際には冗長です。

これを行う唯一の理由は、サブインターフェイスが将来のポイントで変更されて、他のインターフェイスを拡張しなくなることが懸念されるからです。

明示的に両方のインターフェイスを置くことで、その変更から保護されます(そして、そのクラスは両方のインターフェイスで "implements"と言います)。

しかし、これはやや珍しい、驚くべき構成ですが、私が使用するものは何もありません。

0

動作は同じです。
私は、インターフェイスが間接的に実装されていることを理解するために、absractクラスの定義に入る必要のない開発者向けの情報だと思います。
AbstractInterruptibleChannelは、シャネル(Channel)と割り込み可能なもの(InterruptibleChannel)の2つです。両方のインタフェースを宣言すると明示的に強調されます。
カスタムクラスの場合、冗長で無力に見えるかもしれませんが、ソースコードがブラウズされ、何百万回も読み込まれるjdkクラスの場合、おそらくそうではありません。

関連する問題