2017-08-05 4 views
-3

開始する前に私は質問をもっとよく理解するための小さなコードを持っています。リストは常にArrayListメソッドを使用しますか?

ご覧のとおり、Interface typeオブジェクトを使用してクラス(サークル)メソッド(kill)を呼び出すと、私は許可されません。 killメソッドはインターフェースで定義されていないし、実装されていないので意味があります。

私の質問は、それが事件かどうかです。以下に述べる方法でリストを使用すると、そのリストは常にArrayListメソッドを使用していると言われています。技術的には私の上記の例によるべきではありません。

List myList = new ArrayList(); 

もしそうでなければ、誰の方法リストが..?リスト定義されたメソッドは、Listを実装するクラスのどこかに実装する必要があるためです。いいえ?

以下のリンクの最初のコメントも確認してください。同じことも言います。 What is the difference between List and ArrayList?

誰でももっと鮮明な画像が表示されます。どのように動作しますか?上記の種類のスニペットの間に誰のメソッドListが使用するのですか?

+3

リストを実装しています。それ以外の方法ではありません – efekctive

+0

@efekctive ...それが実装されていれば...定義されている場所...またはこの方法で使用すると自動的に実装されます..? – LearnJava

+0

ListクラスはJava言語の一部です。メソッドを持つインターフェースです(実際には何もしません。実装クラスの契約です)。 ArrayListは、Listインタフェースの実装です。それは実際に働く方法を持っています。 – AHungerArtist

答えて

2

派生クラス(この場合はArrayList)のオブジェクトを基本クラス/インタフェース参照オブジェクト(インタフェースList)に格納すると、基本クラス/インタフェースで定義されたメソッドにしかアクセスできません。

これらのメソッドは、インターフェイスの例ではオーバーライドする必要があります。

あなたは

List x = new ArrayList(); 

を書くときあなたはリストのArrayListクラスでオーバーライドされているインターフェースではなく、すべてのArrayListのメソッドのメソッドにアクセスすることができます。

+0

@Chandrasekhra、あなたが言ったように..「ArrayListクラスでオーバーライドされたListインターフェイスのメソッドにアクセスできます。しかし、 "List x = new ArrayList();"を使用すると、このコードを記述するクラスのどこにもオーバーライドされません。自動的に動作するメソッドにアクセスすることができます。これらのメソッドとは何ですか? ..? – LearnJava

+1

ArrayListクラスは、デフォルトでそれをオーバーライドします。必要はありません –

関連する問題