7

Javaコレクションインターフェイスにはいくつかの継承関係があります。たとえば、Collection<T>インターフェイスは。を拡張しIterable<T>ます。JDKのソースコードを確認しましたが、基本クラスで定義されたメソッドの中には、サブクラスで数回繰り返されるものがあります。例: Interable<T>interfaceはメソッドを定義し ましたIterator<E> iterator();が、interfaceCollection<E>List<T>、にも同じメソッドが含まれています。私の理解では、継承は重複を減らすために使用されるので、なぜサブクラスで同じメソッドを定義する必要があるのでしょうか。

4

4 に答える 4

5

java.util.Listで参照

「List インターフェースは、 Collection インターフェースで指定されたものを超えて、反復子、add、remove、equals、および hashCode メソッドのコントラクトに追加の規定を配置します。他の継承されたメソッドの宣言も便宜上ここに含まれています。」

于 2012-07-16T13:41:56.127 に答える
1

Collectionはリリース 1.2 でIterable登場しましたが、その後のリリース 1.5 で簡潔な for ループを可能にするために登場したため、Collectionリリース間でインターフェースと Javadoc を同じに保つケースだったと思います。iterator()しかし、あなたは正しいです。メソッドを から削除できなかった理由はありませんCollection。すべてがコンパイルされます。

于 2012-07-16T13:42:26.890 に答える
1

Collectionインターフェイスが拡張 されIterableます。抽象スーパークラスは、いくつかのクラスに共通のメソッドを実装します。リストの場合は、AbstractList具体的なクラス (ArrayListまたは などLinkedList) が特定の実装の詳細を提供します。

実際、ご想像のとおり、継承はコードの重複を減らすために使用されます。しかし、まさにそのため、すべてのサブクラスにはスーパークラスで定義された同じ操作が含まれ、いくつかのクラスに共通の実装の詳細は、抽象クラス レベルのクラス階層に 1 回だけ表示され、それらはクラス階層で再度「定義」されることはありません。サブクラス - 変更された部分のみが具体的なサブクラスで再定義されます。

于 2012-07-16T13:43:23.443 に答える
0

The Iterable interface was introduced later since 1.5. So, earlier to this version only java.util.Collection subclasses used to implement iterator().

Later iterator() was made standard by introducing Iterable interface such that any Class which can iterated can implement this interface.

After introducing Iterable interface, the Collection interface was also made to extend Iterable interface such that Collection interface also implements the standard one.

For Ex,

  • java.sql.SQLException also implements Iterable
于 2012-07-16T13:40:00.200 に答える