私はJavaを使い始めています。私はここで大きな混乱があります。これはどのように可能ですかこの宣言がJavaで正しい理由
List<String> list = new ArrayList<String>();
リストは、クラスであるArrayListをどのように持つことができるかです。
私はJavaを使い始めています。私はここで大きな混乱があります。これはどのように可能ですかこの宣言がJavaで正しい理由
List<String> list = new ArrayList<String>();
リストは、クラスであるArrayListをどのように持つことができるかです。
オブジェクトの型がである限り、変数の型と変数が参照するオブジェクトの型は同じである必要はありませんと変数の型が互換性があります。では、互換性があるということは何を意味しますか?
これは、オブジェクトの型が変数の型と "is a"の関係にあることを意味します。 ArrayList
はList
インターフェイスを実装しているため、「ArrayList<String>
」は「List<String>
」です。つまり、ArrayList
にはList
が定義するすべてのメソッドがあり、それらのメソッドの定義に準拠していると宣言します(implements List
)。
これは、polymorphismというオブジェクト指向プログラミングの基本概念です。つまり、我々はList
というものがあると言うことができる、と我々はそれがでの作業の実際のList
sがArrayList
秒またはLinkedList
Sまたは任意の他のの具体的なタイプであることを知っているコードを使用せずに、List
秒で動作するコードを書くことができます。
この場合、インタフェースを使用していますが、同じ概念がオブジェクト型階層にも適用されます。 Animal
クラスを使用している場合は、より具体的なサブクラス(Dog
)がある可能性があります。 Animal
タイプで動作するものはDog
で動作します。Dog
はAnimal
です。
ありがとうございます!本当に私を助けてくれた.. – Altair827
子クラスは常に親クラスのすべての内容を含み、余分なデータを含むことができるので、どのクラスもその後継を含むことができます。例:
class Parent {
String someField;
}
class Child extends Parent {
//Here we can access someField field
Long anyAnotherField;
}
Javaでは、多重継承はありません(クラスAは1つのクラスのみを拡張できます)。しかし、インターフェイスがあり、クラスは任意の数のインターフェイスを継承できます。ドキュメントを見ると、interface Collection
、interface List extends Collection
、class ArrayList implementing List
があることがわかります。したがって、ArrayList
はList<T>
、List
(パラメータなし)、Collection
、Object
(Javaではすべてのクラスがオブジェクトを親クラスとして持つ)に配置できます。 (AbstractListのような他のクラスもあります)
あなたは最初のoops機能を学ぶ必要があります。 –
これは、すべてのオブジェクト指向言語の基本的な機能である継承(https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html)と呼ばれています。 –