1. 程式人生 > >Java基礎筆記之內部類

Java基礎筆記之內部類

內部類

簡單說明

 內部類只能被相應的外部類使用,不允許同一個包中的其他類直接訪問。

 內部類可以訪問外部類的成員,因為內部類被當作外部類的成員,類成員之間可以相互訪問,但是外部內不能直接訪問內部類的成員,包括Field和Method。

非靜態內部類

每個內部類物件都引用一個外部類的this變數,假如內部類的某個方法中想訪問外部類的一個Field,同時它自己的成員Field中也有一個同樣的Field,那麼:

通過this.變數名來訪問自己的成員Field;

通過外部類名.this.變數名來訪問外部類的Field。

靜態內部類

用static修飾的內部類,該內部類屬於外部類本身,而不屬於外部類的某個物件,根據靜態成員不能訪問非靜態成員的規則,靜態內部類只能訪問外部類的類成員,不能訪問外部類的例項成員。因此可以通過外部類名.變數名訪問外部類的類成員。

在外部使用內部類

用private修飾的內部類在外部類的內部使用;

用protected修飾的內部類可以在外部類內部被子類繼承,在外部類外部跟private修飾的一樣。

不加修飾符的內部類只能在外部類所在的包內部使用;

用public修飾的內部類能在任何地方使用,當然也要依賴外部類的訪問許可權。

例項化非靜態內部類的形式:OuterClass.InterClass varName = new OuterClass().new InterClass();

或者:    OuterClass outClassObject = new OutClass();

OuterClass.InterClass varName

 = outClassObject.new InterClass();

例項化靜態內部類的形式:OuterClass.InterClass varName = new OuterClass.InterClass();

區別:建立內部類物件時,靜態內部類只需使用外部類即可呼叫構造器,而非靜態內部類必須呼叫外部類的物件來呼叫構造器。

區域性內部類:區域性內部類和區域性變數都是隻是在定義其的方法類有效,因此添不新增訪問控制符沒什麼關係,但是java規定所有的區域性成員不能使用訪問控制符修飾。

匿名內部類:只能使用一次的類

固定格式: new 父類構造器(形參列表) | 實現介面()

                     {

                                   //匿名內部類的類體部分

                     }

規定:

1. 匿名內部類必須也只只能繼承一個父類或實現一個介面,而且匿名內部類不能是抽象類,因為系統在建立匿名內部類時,會立即建立匿名內部類的物件。

2. 匿名內部類不能定義構造器,因為沒有類名,可以通過初始化塊完成構造器的工作。