標題:
內部類別
[打印本頁]
作者:
tonyh
時間:
2015-10-3 15:54
標題:
內部類別
本帖最後由 tonyh 於 2015-10-3 16:20 編輯
一、定義
內部類別(InnerClass)是在JAVA中常見的使用方法。顧名思義,就是有個Class包在另一個Class裡面。
JAVA中的類別依所存在位置分成兩種:
1. 一般類別
2. 內部類別
其中內部類別同樣依所存在的位置又有三種狀態:
[attach]1423[/attach]
二、內部類別的使用權限
[attach]1425[/attach]
1.成員式 Member inner class
所有 field/method 均可自由使用
2.區域式 Local inner class
所有 field/method 均可自由使用
Local variables 必須標記為final才可以使用
[備註]
如果Local和Field有同名變數時,預設會選用距離inner class最近的階層,也就是Local的變數
如果想要使用Field變數,就需要使用到<className>.this.<fieldName>來選用該field
3.匿名式 Anonymous inner class
與Local inner class一樣
(其實Anonymous inner class與Local inner class的性質是一樣的)
三、從外部使用內部類別的方法
1.使用成員式Member inner class的方法
一般Member Classes: new <ClassName>().new <InnerClassName>();
意思就是必須先取得<ClassName>的實體,再用其new來取得<InnerClassName>實體
Static Classes: new <ClassName>.<StaticInnerClassName>();
由於Static類別隨時可以取得,因此直接指名取得實體即可
2.使用區域式Local inner class的方法
無直接取用方法,僅可能透過所屬method回傳,限制很多,用途也不大,幾乎不這樣使用。
[備註] 為什麼必須標記為final才可以使用?
Local inner class所在的Method回傳值(return)後,Method中的變數將會被銷毀,因此在Method中,被Local inner class所用到的變數會被複製一份來使用,此時,如果該變數不是final,則複製的變數就可能因為更改而不同步,造成錯亂,因此Local inner class所用到的local variables必須標記為final。
另外,匿名式Anonymous inner class所用到的local variables也必須須標記為final,雖然規定都一樣,但是原因並不同。這裡是因為AIC在實體化時,會將使用到的local variables直接複製並且生成為自己的private變數,同樣的,出現拷貝時,就會有同步的問題,因此該變數也必須被標記為final。
歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/)
Powered by Discuz! 7.2