為什麼要寫成List a = new ArrayList()
原文地址:點選開啟連結
List是一個介面,而ListArray是一個類。
ListArray繼承並實現了List。
所以List不能被構造,但可以向上面那樣為List建立一個引用,而ListArray就可以被構造。
List list; //正確 list=null;
List list=new List(); // 是錯誤的用法
List list = new ArrayList();這句建立了一個ArrayList的物件後把上溯到了List。此時它是一個List物件了,有些ArrayList有但是List沒有的屬性和方法,它就不能再用了。
而ArrayList list=new ArrayList();建立一物件則保留了ArrayList的所有屬性。
這是一個例子:
import java.util.*;
public class TestList{
public static void main(String[] args){
List list = new ArrayList();
ArrayList arrayList = new ArrayList();
list.trimToSize(); //錯誤,沒有該方法。
arrayList.trimToSize(); //ArrayList裡有該方法。
}
}
編譯一下就知道結果了。
如果這個樣子:
List a=new ArrayList();
則a擁有List與ArrayList的所有屬性和方法,不會減少
如果List與ArrayList中有相同的屬性(如int i),有相同的方法(如void f()),
則a.i是呼叫了List中的i ,例項變數被隱藏
a.f()是呼叫了ArrayList中的f(); 例項方法被覆蓋
---------------------------------------------------------------
問題的關鍵:
為什麼要用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢?
問題就在於List有多個實現類,現在你用的是ArrayList,也許哪一天你需要換成其它的實現類,如 LinkedList或者Vector等等,這時你只要改變這一行就行了:
List list = new LinkedList(); 其它使用了list地方的程式碼根本不需要改動。
假設你開始用 ArrayList alist = new ArrayList(), 這下你有的改了,特別是如果你使用了 ArrayList特有的方法和屬性。
相關文章
- 為什麼要成為「無敵」程式設計師?程式設計師
- 為什麼要虛擬化,為什麼要容器,為什麼要Docker,為什麼要K8S?DockerK8S
- [譯]為什麼要寫 super(props)
- 為什麼要寫技術部落格?
- 為什麼我要寫自己的框架?框架
- 為什麼if中null要寫在前面?Null
- 我們為什麼要技術寫作
- 為什麼我要編寫自己的UIKitUI
- Koala Framework是什麼?我為什麼要寫這個框架?Framework框架
- 為什麼要堅持寫技術博文
- [譯]我們為什麼要寫 super(props)?
- 技術人員為什麼要寫部落格?
- 做為技術人員為什麼要寫部落格?
- 做為技術人員為什麼要寫部落格
- 為什麼要removeREM
- 為什麼要敏捷?敏捷
- java為什麼要重寫hashCode和equals方法Java
- 手寫js new,new的過程到底發生了什麼JS
- Java重寫equals方法時為什麼要重寫hashcode方法Java
- 為什麼要code reviewView
- 程式設計師 為什麼要堅持寫部落格程式設計師
- 為什麼要寫《機器學習實踐應用》這本書機器學習
- ArrayList 為什麼執行緒不安全執行緒
- 要麼程式設計要麼成為一段程式程式設計
- 為什麼要這樣寫final ReentrantLock lock = this.lock; ?ReentrantLock
- 為什麼程式設計師要儘量少寫程式碼程式設計師
- 寫在平臺大戰之後:為什麼我要重寫自己的UIKit?UI
- 為什麼要學習 RustRust
- 為什麼要學習 Julia
- 為什麼要指令重排序?排序
- 為什麼要學習 Vim?
- 為什麼要選擇SQL?SQL
- MySQL為什麼要set namesMySql
- 為什麼我不贊成開發來寫檢視
- list-style-type 為什麼總失效?
- 成為遊戲開發程式設計師,要學些什麼遊戲開發程式設計師
- 設計師為什麼要學程式設計,開發者為什麼要學設計?程式設計
- Java中將 int[] 陣列 轉換為 List(ArrayList)Java陣列