內部類知識總結

2021-09-30 09:13:36 字數 1726 閱讀 5363

1.內部類定義:可以將乙個類的定義放在另乙個類或者介面的定義內部.

2.內部類分類:

3.內部類與外部類的通訊

3.1 對於平凡的內部類 :

形如

class outter

;void g(){};

class inner

}}

從inner類內部可訪問outter類的任何域和方法.通常平凡的內部類儲存了乙個對外部類的物件的引用.

3.2 對於巢狀類:

形如

class outter

}

從inner類內部可訪問outter類的靜態域和靜態方法,巢狀類並沒儲存對外部類的物件的引用.

3.3 匿名內部類: 同平凡的內部類

3.4 區域性內部類:同平凡的內部類,並且其可以訪問包含其的外部類的方法體內定義的區域性變數.

4.內部類的訪問限制

4.1 對於平凡的內部類:其可能有四種類型別:public , protected , 包作用域 , private

除了private外,其他的三種型別的內部類都分別可以在不同的作用域被訪問,若要構造乙個內部類的例項

outter outter = new outter();//首先要生成乙個外部類的引用

outter.inner inner = outter.new inner();

注意兩點;

對於private型別的平凡的內部類,可以通過工廠方式返回其引用,形式如下:

//step1:定義乙個介面或類

inte***ce x

class outter;};

public static inner getinner() }

//step2:獲得內部類引用

x x = outter.getinner();

平凡的內部類內部不能包含靜態的域和方法.

4.2 匿名內部類

4.2.1  無引數匿名內部類

class outter

;};//注意此處需要加分號,否則給出編譯時錯誤}}

4.2.2 有引數匿名內部類
//@exzample 1: final--needed;

class outter;

};//注意此處需要加分號,否則給出編譯時錯誤}}

//@exzample 2: final--neededn't;

abstract base

abstract void f();

}class outter

}}

在匿名內部不用使用建構函式,不過可以使用例項初始化,形如
class outter

void xx(){};

};//注意此處需要加分號,否則給出編譯時錯誤}}

4.3 區域性內部類: 與匿名內部類類似

5. 對於平凡內部類,生成的.class檔案形如: 外部類名$內部類名.class

對於匿名內部類,生成的.class檔案形如: 外部類名$x.class  (其中x = 1,2 ,3....n)

對於區域性內部類,生成的.class檔案形如: 外部類名$x.內部類名.class

內部類總結

1內部類的巢狀可以理解成類的鏈關係,在構造乙個內部類 非static 的例項的時候,會將直接外層類的例項 作為引數傳進建構函式,而外層類的例項也是用其外層類的例項構造,所以是一種鏈狀關係,內部的類可以使用所有 外層的類的例項,而外層的類不能使用內層的類,應用a.this 最外層類例項 a.b.c.t...

內部類總結

內部類不是很好理解,但說白了其實也就是乙個類中還包含著另外乙個類 如同乙個人是由大腦 肢體 器官等身體結果組成,而內部類相當於其中的某個器官之一,例如心臟 它也有自己的屬性和行為 血液 跳動 顯然,此處不能單方面用屬性或者方法表示乙個心臟,而需要乙個類 而心臟又在人體當中,正如同是內部類在外部內當中...

內部類總結

內部類不是很好理解,但說白了其實也就是乙個類中還包含著另外乙個類 如同乙個人是由大腦 肢體 器官等身體結果組成,而內部類相當於其中的某個器官之一,例如心臟 它也有自己的屬性和行為 血液 跳動 顯然,此處不能單方面用屬性或者方法表示乙個心臟,而需要乙個類 而心臟又在人體當中,正如同是內部類在外部內當中...