內部類總結

來源:互聯網
上載者:User

標籤:style   blog   java   color   使用   strong   

 

一。成員內部類:與類的成員變數一樣

1 可以加任意的修飾:private, protected,頂級類只可以為public, default

2 內部類不可脫離其外部類的限制使用,因此在外部類以外建立內部類要這樣:

outerObject=new outerClass(Constructor Parameters);outerClass.innerClass innerObject=outerObject.new InnerClass(Constructor Parameters);


3 內部類對象可以訪問外部類的任意變數或方法(包括private變數或方法),因為Java編譯器在建立內部類對象時,隱式的把其外部類對象的引用

也傳了進去並一直儲存著.所以成員內部類和外部類的屬性有相同的生命週期)

4 在內部類中,外部類與內部類同名的成員會被屏蔽, 不過可以這樣訪問外部的同名屬性: OuterClass.this.field 

5 非靜態內部類不能有靜態成員,因為它違背了成員類必須依賴外部類而存在的原則(靜態成員在Class被load的時候就初始化了)

6 內部類可以實現一個外部介面或抽象類別,外部類返回這樣的一個介面,以達到隱藏介面的實現的目的。如JDK中List的Iterator,map介面實現使用

集合非靜態內部類來實現它的集合視圖

 

 

一。靜態內部類:如同類的靜態成員一樣; 它和成員內部類的區別是它沒有指向外部類的引用

1 建立靜態內部類對象:

OuterClass.InnerClass obj = new OuterClass.InnerClass(params);


2 靜態內部類可以有非靜態成員

3 靜態內部類只能訪問外部類的靜態成員

4 靜態內部類的常見用法:作為輔助類,僅當與它的外部類一起使用時才有意義

5 私人靜態內部類的常見用法:用來代表外圍類所代表的對象的組件。例如:考慮一個Map執行個體,Map的實現裡面有一個Entry對象。雖然每個Entry

都與一個Map關聯,但entry上的方法(getKey,getValue,setValue)並不需要訪問該Map。因此,使用非靜態內部類來表示Entry是很浪費的:每個

Entry中將會包含一個指向該Map的引用 ,浪費了時間和空間。

 

三。局部內部類:方法體或者代碼片斷中定義的類

1 局部內部類前面不能有access修飾符(和定義局部變數一樣)

2 它有它自己的範圍,超出了這個範圍就無效

3 它可以訪問外部類的所有成員(因為外部類的成員對該方法可見)

4 定義在方法體中的內部類只能訪問該方法的final變數,原因:定義在方法體中的變數會隨著方法的退出而消亡,通過定義其為final變數,可以擴充其生命期

5 定義在代碼塊中的內部類只能使用在該block中定義的final變數

 

四。匿名內部類:在某些情況下,我們只需要內部類的一個對象,而不需要該類的名字

1 匿名內部類的執行個體化:

 new SomeInterfaceOrClass(){......}; 

意思是創造一個實現(繼承)了SomeInterfaceOrClass的類的對象

2 定義匿名內部類的時候,如果用到外面的對象,需要把這個參數的引用聲明成final的

 

五。附源碼:

1.Entry

    static class Entry<K,V> implements Map.Entry<K,V> {        final K key;        V value;        Entry<K,V> next;        final int hash;        /**         * Creates new entry.         */        Entry(int h, K k, V v, Entry<K,V> n) {            value = v;            next = n;            key = k;            hash = h;        }        public final K getKey() {            return key;        }        public final V getValue() {            return value;        }        public final V setValue(V newValue) {        V oldValue = value;            value = newValue;            return oldValue;        }       。。。。。}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.