Javaコレクションインタフェースにはいくつかの継承関係があります。たとえば、Collection<T>
インターフェイスはIterable<T>
に拡張されます。 JDKでソースコードをチェックしましたが、基本クラスで定義されているいくつかのメソッドがサブクラスで何度か繰り返されています。例: Interable<T>
インターフェイスで定義されたメソッドIterator<E> iterator();
しかし、インターフェイスCollection<E>
とList<T>
では、同じメソッドが含まれています。私の理解では、継承は重複を減らすために使用されるので、なぜサブクラスで同じメソッドを定義する必要がありますか?Javaコレクションインタフェースの継承
答えて
Iterable
インターフェイスは、後でsince 1.5
に導入されました。ですから、以前のバージョンではjava.util.Collection
のサブクラスでiterator()
を実装していました。
後でiterator()
は、反復できる任意のクラスがこのインターフェイスを実装できるようにIterable
インターフェイスを導入することによって標準化されました。
Iterable
インターフェイスを導入したあと、Collection
インターフェイスもIterable
インターフェイスを拡張して、Collection
インターフェイスも標準のインターフェイスを実装するようにしました。例、
java.sql.SQLException
についてはも「Listインタフェースは、上で、Collectionインタフェースで指定されたものを超えて、追加の規定を置くjava.util.List
に反復処理可能
参照を実装iterator、add、remove、equals、およびhashCodeメソッドのコントラクト。他の継承メソッドの宣言も含まれています。 e便宜のために。
+1事実私はそれらのメソッドを再宣言する理由は(あなたが州を投稿した引用として)推測されます:1.異なるJavaDocコメント(言及されている契約)を追加することができ、利用可能な方法の概要。 – Thomas
Collection
は、リリース1.2で出てきたが、Iterable
は、forループ簡潔可能にするためにリリース1.5で、その後出てきたので、私はそれがリリース間で同じCollection
インタフェースおよびJavadocを保つためのケースだったと思います。しかし正しいですが、メソッドをCollection
から削除できない理由はありません。すべてがコンパイルされます。
Collection
インターフェースは、Iterable
です。抽象スーパークラスはいくつかのクラスに共通のメソッドを実装しています(リストの場合はAbstractList
)、各具体クラス(具体的にはArrayList
またはLinkedList
)が具体的な実装の詳細を提供します。
実際、あなたが推測したように、継承はコードの重複を減らすために使用されます。しかし、そのために、すべてのサブクラスにはスーパークラスで定義された同じ操作が含まれます。複数のクラスに共通の実装の詳細は、抽象クラスレベルのクラス階層に1回しか表示されません。サブクラス - 変更される部分だけが具象サブクラスで再定義されます。
- 1. コレクションインタフェースJava
- 2. Java ORM:複数(継承)継承
- 3. クラス継承java
- 4. java継承メソッド
- 5. Java継承/コンストラクタ
- 6. Javaレストコンストラクタ継承
- 7. Java継承TextArea
- 8. Java継承
- 9. Javaのジェネリック/継承
- 10. のJava:継承コンストラクタ
- 11. Javaチェックメソッドの継承
- 12. java JAXBと継承
- 13. プライベートコンストラクタと継承(Java)
- 14. Java継承質問
- 15. Java継承とキャスト
- 16. java継承とジェネリックス
- 17. のJavaのジェネリックメソッドの継承
- 18. Java継承:@Overrideメソッドのエラー
- 19. Javaの継承質問
- 20. Javaのシリアライゼーションと継承
- 21. Javaの継承とコンストラクタ
- 22. のJava型キャストと継承
- 23. Javaコピーのコンストラクタと継承
- 24. パッケージとJavaの継承コンセプト
- 25. Javaの継承、ジェネリック、バイトコード
- 26. 継承型のJavaビルダー
- 27. Javaでの動的継承
- 28. 継承のあるJavaチケットプログラム
- 29. Javaの継承と再帰
- 30. Java継承コンストラクタの問題
彼はインターフェースを参照しているので、オーバーライドは必要ありません。 – Thomas