嵌套類: 1.靜態成員類 靜態成員類是外圍類的一個靜態成員,遵守同樣的可訪問性規則 用法:a.作為公有的輔助類 內部類: 2.非靜態成員類 語法上只和靜態成員類的唯一區別是少一個static修飾符 a.它的每個實例都隱含著與外圍類的一個實例相關聯 b.在其實例方法內部可以調用外圍實例上的方法,或者利用this構造獲得外圍實例的引用 用法:a.定義一個Adapter
public class MySet<E> extends AbstractSet<E>{ public Iterator<E> iterator(){ return new MyIterator(); } PRivate class MyIterator implements Itertor<E>{ ... } }–如果嵌套類嵌套類的實力可以在它外圍類的實例之外獨立存在,這個嵌套類必須是靜態成員類 –如果聲明成員類不要求訪問外圍實例,就始終要把static放在他的聲明中. 3.匿名類 當且僅當匿名類粗現在非靜態環境中時,它才有外圍實例 缺點:不能執行instanceof測試和任何命名類的其他事情 無法實現多個接口或擴展一個類;除了從他的超類型中繼承得到之外,其客戶端無法調用任何成員;由于匿名類出現在表達式中,他必須保持簡短來保證程序的可讀性(<10) 用法:a.動態創建函數對象Arrays.sort();
Arrays.sort(StringArray,new Comparator<String>(){// public int compare(String s1,String s2){// return s1.length()-s2.length();// }// }) b.創建過程對象(Runnable,Thread,TimerTask實例) c.聲明在靜態工廠方法的內部 4.局部類:擁有其他嵌套類的特點 在任何可以聲明局部變量的地方都可以聲明局部類,并遵守同樣的作用域規則總結:如果一個嵌套類需要在單個方法之外仍然可見,或者他太長了不適合放在方法內部,就使用成員類.如果成員類的每個實例都需要一個指向其外圍實例的引用,就用靜態成員類;否則,就做成靜態的.如果這個嵌套類屬于一個方法的內部,你只需要在一個地方創建實例,并且已經有了一個預置的類型可以說明這個類的特征,就要把它做成匿名類;否則,就做成局部類
新聞熱點
疑難解答