2016-07-03 10 views
-5

私はJavaを使い始めています。私はここで大きな混乱があります。これはどのように可能ですかこの宣言がJavaで正しい理由

List<String> list = new ArrayList<String>(); 

リストは、クラスであるArrayListをどのように持つことができるかです。

+0

あなたは最初のoops機能を学ぶ必要があります。 –

+4

これは、すべてのオブジェクト指向言語の基本的な機能である継承(https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html)と呼ばれています。 –

答えて

0

オブジェクトの型がである限り、変数の型と変数が参照するオブジェクトの型は同じである必要はありませんと変数の型が互換性があります。では、互換性があるということは何を意味しますか?

これは、オブジェクトの型が変数の型と "is a"の関係にあることを意味します。 ArrayListListインターフェイスを実装しているため、「ArrayList<String>」は「List<String>」です。つまり、ArrayListにはListが定義するすべてのメソッドがあり、それらのメソッドの定義に準拠していると宣言します(implements List)。

これは、polymorphismというオブジェクト指向プログラミングの基本概念です。つまり、我々はListというものがあると言うことができる、と我々はそれがでの作業の実際のList sがArrayList秒またはLinkedList Sまたは任意の他のの具体的なタイプであることを知っているコードを使用せずに、List秒で動作するコードを書くことができます

この場合、インタフェースを使用していますが、同じ概念がオブジェクト型階層にも適用されます。 Animalクラスを使用している場合は、より具体的なサブクラス(Dog)がある可能性があります。 Animalタイプで動作するものはDogで動作します。DogAnimalです。

+1

ありがとうございます!本当に私を助けてくれた.. – Altair827

0

子クラスは常に親クラスのすべての内容を含み、余分なデータを含むことができるので、どのクラスもその後継を含むことができます。例:

class Parent { 
    String someField; 
    } 

    class Child extends Parent { 
    //Here we can access someField field 
    Long anyAnotherField; 
    } 

Javaでは、多重継承はありません(クラスAは1つのクラスのみを拡張できます)。しかし、インターフェイスがあり、クラスは任意の数のインターフェイスを継承できます。ドキュメントを見ると、interface Collectioninterface List extends Collectionclass ArrayList implementing Listがあることがわかります。したがって、ArrayListList<T>List(パラメータなし)、CollectionObject(Javaではすべてのクラスがオブジェクトを親クラスとして持つ)に配置できます。 (AbstractListのような他のクラスもあります)

関連する問題