4

重複の可能性:
ArrayList に「実装リスト」があるのはなぜですか?

私はいくつかの記事Diff b/w I vs ACと、インターフェイスと抽象クラスをいつ使用するかについての SO に関する質問を確認しました。

ArrayList クラスに出くわしたとき、ArrayList クラスは AbstractList クラスを拡張し、List インターフェイスを実装します。AbstractList と List には、add()、remove() などの一般的なメソッドがあります。

編集:つまり、AbstractList が List を実装する場合、なぜ Arraylist クラスに List を実装させるのか

両方が共通のメソッドを持っている場合、この種の組み合わせ継承動作設計が好まれるのはいつですか?

public class ArrayList<E> extends AbstractList<E>
        implements List<E>
4

3 に答える 3

4

BaseClassときどき、インターフェイスを実装する抽象を作成IBaseClassChildClassBaseClass. つまり、次のとおりです。

public interface IBaseClass {

}

public abstract class BaseClass implements IBaseClass {

}

public class ChildClass extends BaseClass {

}

ここで、インターフェースがあり、それIChildClassChildClass実装するとします。

public class ChildClass extends BaseClass implements IChildClass {

}

そして、IBaseClasshas メソッドがあるとしsomeMethodます。のインスタンスを次のようなChildClass実装インターフェイスで使用する場合IChildClass:

IChildClass obj = new ChildClass();

その後、あなたは呼び出すことができませんobj.someMethod()。次に、これを行う必要があります。

public interface IChildClass extends IBaseClass {

}

Java 1.2 のドキュメントで、最新バージョンではインターフェイスjava.util.Listが拡張されていないことがわかります。は当時最高のインターフェースであり、. を順番に拡張します。当時は最高級でした。現在実装しています。したがって、Java の常に拡張可能なパターンを念頭に置いて、この設計パターンに従っていることは明らかです。java.util.Collectionjava.util.Listjava.util.AbstractListListArrayListAbstructListAbstractCollectionAbstractCollectionAbstractCollectionCollection

于 2013-01-04T18:46:48.250 に答える
3

このimplements List場合、 は冗長です。この呼び出しは、クラス階層をナビゲートする必要なしに List を実装することを明確にする可能性があります。

于 2013-01-04T18:36:47.553 に答える
0

AbstractList<E>も実装List<E>しているので、同じメソッドです。

于 2013-01-04T18:36:31.720 に答える