2017-08-05 18 views
-3

開始之前我有小代碼來更好地理解問題。如你所見,如果我使用Interface類型對象來調用class(Circle)方法(kill),我是不允許的。這是有道理的,因爲kill方法既不在接口中定義也不實現。爲什麼列表總是使用ArrayList方法?

我的問題是,如果這是一種情況,當我們以下面提到的方式使用List時,爲什麼它總是說List使用ArrayList方法...?技術上它不應該按照我上面的例子。

List myList = new ArrayList(); 

如果不是,那麼誰的方法列表使用..?因爲List定義的方法需要在實現List的類中的某處實現。沒有..?

檢查下面的答案中的第一個評論,以及它也說同樣的事情。 What is the difference between List and ArrayList?

有人可以想出更清晰的圖片,它的工作原理是什麼?以上類型片段中使用的方法列表是什麼?

+3

ArrayList實現列表。不是相反 – efekctive

+0

@efekctive ...好的..如果它實現...它定義的位置。或者當我們以這種方式使用時會自動實現..? – LearnJava

+0

List類是Java語言的一部分。它是一個具有方法的接口(但實際上並沒有做任何事情 - 它們是任何實現類的合同)。 ArrayList是List接口的一個實現。它具有實際工作的方法。 – AHungerArtist

回答

2

當您在基類/接口引用對象(接口列表)中存儲派生類的對象(在本例中爲ArrayList)時,只能訪問在基類/接口中定義的方法。

這些方法必須在接口的示例中重寫。

所以,當你寫

List x = new ArrayList(); 

您可以訪問在ArrayList類中重寫List接口的方法,但並非所有的ArrayList的方法。

+0

@Chandrasekhra,就像你說的那樣。「你可以訪問在ArrayList類中重寫的List接口的方法。」但是當我們使用「List x = new ArrayList()」時,我們從不會覆蓋我們編寫代碼的類中的任何地方嗎?它會自動允許訪問方法來工作那些方法是什麼以及它們如何被重寫..? – LearnJava

+1

ArrayList類默認覆蓋它..你不需要 –

相關問題