List cityList = new ArrayList() ;
LinkedList peopleList = new LinkedList() ;
兩個代碼段都是正確的,但是這兩行代碼之間存在的顯著的差別。第一行表示我們要創建一個ArrayList,但是我們只需要把它作為一個List來訪問。第二行正好相反。是,LinkedList項目被創建了,ArrayList也一樣。但是,聲明部分說明它只能作為LinkedList來訪問,這就數它的最大區別。 List peopleList = new ArrayList() ;
通過學習僅使用接口來處理任何對象,你將發現在設計完成之后修改實現,你需要修改的僅僅是聲明部分,除此之外,沒有任何代碼改動。這就是接口的絕妙之處。因為類的最初聲明是LinkedList,當類型變為List時意味著象addFirst或addLast這樣的方法是無效的,因為新的peopleList的類型是List,它沒有這些方法。 import java.util.*;
public class Interfaces {
public static void main(String args[]) {
Properties props = System.getProperties();
Set keySet = props.keySet();
dumpIterator(keySet.iterator());
List list = Arrays.asList(args);
dumpIterator(list.iterator());
}
private static void dumpIterator(Iterator itor) {
// System.out.println(itor.getClass().getName());
while (itor.hasNext()) {
System.out.println(">> " + itor.next());
}
System.out.println("----");
}
}
類Iterator的類型是unknown,這正是接口的絕妙之處,而不是問題。真正的事實是iterator方法返回的是一個真實的Iterator對象。然而,dumpIterator通常提供接口的完全實現。 新聞熱點
疑難解答