ランダム男:
私たちは整数の配列リストを作り、我々はリストに付加価値を最初java.Atにおけるジェネリックを学んでいます。
import java.util.ArrayList;
import java.util.List;
public class GenericsRunner {
public static void main(String[] args) {
ArrayList<Integer> numbers=new ArrayList<>();
numbers.add(1);
}
static <X extends List> void duplicate(X list) {
list.addAll(list);
}
}
方法重複のみ拡張しているこれらのオブジェクトで使用することができますList
。しかし、以降のList
インタフェースがあります
public interface List<E> extends Collection<E>
そしてArrayList
implemetingされますList
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable,
java.io.Serializable
私は、この時点で捕まってしまいました。スーパークラスからプロパティを継承し、それらのクラスによって使用されている拡張します。しかし、どのようにArraylist
拡張されましたかList
?実際にArrayList
実装されますList
。これはどのようにこの実装メカニズムのためのキーワードの作業を拡張していますか?私はそれが使用されていることを混乱していますextends
とimplements
同じですか?
Dmitriiアブラモフ:
理由は、<X extends T>
単に手段X
から継承されますT
。あなたはクラス宣言に継承を記述するときのようなインターフェースのための特別な構文はありません。
ArrayList
実装は、インターフェイスList
、それがから継承されていることをどの手段をList
したがって、ジェネリック型に適しています<X extends List>
。
Javaでは任意のクラスは、拡張することができます唯一のクラスを。デフォルトでは、それはだObject
あなたが他の親クラスを指定しないとき。そして、クラスおよびインタフェースは、インタフェースの任意の量を実装することができます。
お役に立てれば。