標籤:靜態變數 方式 final 概念 成員內部類 strong new 匿名內部類 位置
內部類
可以在一個類的內部定義另一個類這種類成為內部類或嵌套類,比如:
1 class Outer{ 2 … 3 class Inner{ 4 …. 5 } 6 } 7 class Outer1{} // 這個Inner1不是Outer1的內部類,不在Outer1的類體括弧內 8 class Innter1{ 9 ……10 }11 Class Outer2{ //Inner2雖然是在Outer2的方法內,但還是在Outer2的類體括弧內,是內部類12 ……13 public void test(){14 class Inner2{15 ….16 }17 }18 }
內部類有什麼問題和好處:
- 問題:外部類不使用或不建立外部類對象,就不能直接建立內部類對象
- 好處:外部類的私人屬性,內部類可使用,而且不破壞封裝,這也是為什麼內部類存在的重要原因
內部類的特性
- 內部類的特徵與變數概念特性很相似
- 內部類的位置與變數位置相似
- 變數可分為執行個體變數(成員變數),局部變數,靜態變數
- 內部類與變數相似,也可分為四種
內部類的分類
靜態內部類,成員內部類,局部內部類,匿名內部類
成員內部類
1.使用成員內部類就象使用成員變數一樣,在本類的主方法中則直接使用成員內部類,不用加上外部類的名字來訪問。但在其他類的主方法中要使用成員內部類則就需要使用外部類.內部類來訪問。
2.使用外部類名來訪問內部類還因為一個內部類可能有不同的外部類
3.建立一個成員內部類對象必須先建立外部類的對象,因為成員內部類要訪問外部類的成員
4.成員內部類可以訪問外部類的所有屬性
5.成員內部類中不能定義有靜態屬性
6.當外部類的成員與內部類成員,內部類中局部變數同名時,則使用三種不同方式訪問
- 直接使用變數名則訪問局部變數
- 使用this.變數名則訪問內部類的成員
- 使用外部類名.this.變數名則訪問外部類的成員
靜態內部類
- 在成員位置上定義為static的內部類,稱為靜態內部類
- 靜態內部類類似於靜態變數,修飾靜態變數的修飾符也可以修飾靜態內部類
- 靜態內部類與靜態方法,靜態屬性相似,訪問靜態方法,靜態屬性用類名.屬性名稱/方法名訪問,但是在本類中可不用類名.來訪問。靜態內部類也一樣,在本類方法中訪問則不用加上外部類名來訪問,若在其他類的方法中則要加外部類名.內部類名來訪問。
- 靜態內部類中只能訪問外部類的靜態成員和本內部類的成員
- 靜態內部類中不能訪問外部類的非靜態成員
匿名內部類
1.匿名內部類是一種特殊的局部內部類,局部內部類可以轉化為匿名內部類
2.局部內部類要轉化為匿名內部類必須具備3個條件
- 首先是一個局部內部類,也是一個私人的內部類
- 該局部內部類實現一個介面或繼承一個父類
- 局部內部類只new一次建立一個對象
3.匿名內部類就是無顯式地聲明某個類名來實現介面,而直接實現介面的方法的類
4.匿名內部類不能定義構造方法,因為匿名內部類是一個特殊局部內部類,它沒有類名。
5.匿名內部類可以訪問外部類的局部變數,但也要求外部類的局部變數是final型的才能訪問
6.匿名內部類可以訪問外部類的屬性
7.匿名內部類可以在一個類的方法中建立,同樣可以在一個類的主方法中實現。
8.當繼承的父類中抽象方法與實現的介面中方法同名,同參數列表,同傳回型別,則子類唯寫一個方法實現就可以了
9.當繼承的父類中抽象方法與實現的介面中的方法同名,但傳回型別不同,則子類就必須寫出每個方法,但這樣的方法集同名,傳回型別不一樣則認為是同一方法,又不能構成重載,則就會編譯出錯
java面對對象(六)--內部類、匿名內部類