2016-03-23 7 views
0

でAbstractSetのメソッドに相当します。 Setにキャストした場合、Setの実装クラスのすべてがAbstractCollectionから直接的または間接的に継承されることを考慮しても差はありません。これには特別な理由はありますか? Linkは、私が<code>AbstractSet</code>で<code>equals</code>方法は<code>Collection</code>代わりの<code>Set</code>にオブジェクト<code>o</code>を型キャストする理由を知って好奇心のJava

+2

投稿ごとに1つの質問にすると、本当にうまく機能します。あなたは#1がどうなるべきかを示す短いプログラムを作ることができますか? – Teepeemm

+1

#2:抽象クラスはインタフェースメソッドの実装を提供します。 – bcsb1001

+1

どちらの質問も、Javaでのクラス継承とインターフェイス実装の理解をはっきりとはっきりと理解していないことに基づいています。私はあなたがその主題を代わりに読むべきだと思います。簡単な説明:1 - 違いは無関係、2 - メソッドはAbstractCollectionクラスから継承され、Setインタフェースから継承されません。 – jarnbjo

答えて

2
  1. 意味上の相違がないものとします。キャストにSetではなくCollectionを使用することは、具体的には最小のタイプを使用するという原則のためです(Set<Foo> fooSet = new HashSet<>();などの宣言と同じ原則)。 Collectionのメソッドのみが必要なので、Collectionにキャストします。ただし、これはJLSで定義されていない重要な実装の詳細です。

  2. (削除質問)インターフェイスは、特定の動作(メソッド)がすべての実装に存在する必要があることを示しています。インタフェースが実装されているだけでなく、この動作を提供する抽象クラスをクラスが継承している場合、クラスには必要な動作が存在するため、これは問題ありません。実際の実装は抽象クラスから派生しています。

関連する問題