Java基礎-知識點總結-Java內部類

Java內部類

內部類

    內部類是指在一個外部類的內部再定義一個類。內部類作爲外部類的一個成員,並且依附於外部類而存在的。內部類可爲靜態,可用protectedprivate修飾(而外部類只能使用public和缺省的包訪問權限)。內部類主要有以下幾類:成員內部類、局部內部類、靜態內部類、匿名內部類。

   每個內部類都能獨立地繼承自一個(接口的)實現,所以無論外圍類是否已經繼承了某個(接口的)實現,對於內部類都沒有影響。如果沒有內部類提供的可以繼承多個具體的或抽象的類的能力,一些設計與編程問題就很難解決。從這個角度看,內部類使得多重繼承的解決方案變得完整。接口解決了部分問題,而內部類有效地實現了多重繼承

  *成員內部類

   1、作爲外部類的一個成員存在,與外部類的屬性、方法並列;

   2、成員內部類中,不能定義靜態成員;

   3、成員內部類中,可以訪問外部類的所有成員;

   4、內部類和外部類的實例變量可以共存

   5、在內部類中訪問內部類自己的變量直接用變量名或用this.變量名,在內部類中訪問外部類中與內部類同名的實例變量用外部類名.this.變量名,如果內部類中沒有與外部類同名的變量,則可以直接用變量名訪問外部類變量;

   6、如果想要創建內部類對象,必須使用此外部類的一個對象來創建其內部類對象

      例:

classOuter

{

      ;

      class inner()

      {

             ;

}

}

Outerout = new Outer(); 

          Outer.Inner in= out.new Inner();

    注意:內部類是一個編譯時的概念,一旦編譯成功,就會成爲完全不同的兩類。對於一個名爲outer的外部類和其內部定義的名爲inner的內部類。編譯完成後出現outer.classouter$inner.class兩類。

  *局部內部類

1、在方法中定義的內部類稱爲局部內部類。與局部變量類似,局部內部類不能有訪問說明符,因爲它不是外圍類的一部分,但是它可以訪問當前代碼塊內的常量,和此外圍類所有的成員;

2、可以定義與外部類同名的變量;

3、不可以定義靜態變量;

4、在內部類中訪問內部類自己的變量直接用變量名或用this.變量名,在內部類中訪問外部類中與內部類同名的實例變量用外部類名.this.變量名,如果內部類中沒有與外部類同名的變量,則可以直接用變量名訪問外部類變量;

5、訪問局部內部類必須先有外部類對象

*靜態內部類(嵌套類)

1.要創建嵌套類的對象,並不需要其外圍類的對象;
  2.不能從嵌套類的對象中訪問非靜態的外圍類對象;

3、外部類訪問內部類的靜態成員:內部類.靜態成員;

4、外部類訪問內部類的非靜態成員:實例化內部類即可;

5、生成一個靜態內部類不需要外部類成員,靜態內部類的對象可以直接生成:Outer.Innerin = new Outer.Inner(); 而不需要通過生成外部類對象來生成

*匿名內部類
  匿名內部類就是沒有名字的內部類。

   格式:new父類或者接口()

{定義子類內容}

*什麼情況下需要使用匿名內部類?如果滿足下面的一些條件,使用匿名內部類是比較合適的
    1、只用到類的一個實例;
  2、類在定義後馬上用到;
  3、類非常小(SUN推薦是在4行代碼以下);
  4、給類命名並不會導致你的代碼更容易被理解。
 *在使用匿名內部類時,要記住以下幾個原則
  1、匿名內部類不能有構造方法;
  2、匿名內部類不能定義任何靜態成員、方法和類;
  3、匿名內部類不能是public,protected,private,static
  4、只能創建匿名內部類的一個實例;
    5、一個匿名內部類一定是在new的後面,用其隱含實現一個接口或實現一個類;

6、因匿名內部類爲局部內部類,所以局部內部類的所有限制都對其生效
  必要的引用,然後程序才能編譯通過。





發佈了37 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章