Java中的成員內部類(實例內部類):相當于類中的一個成員變量,下面通過一個例子來觀察成員內部類的特點
public classOuter {//定義一個實例變量和一個靜態變量
private inta;private static intb;//定義一個靜態方法和一個非靜態方法
public static voidsay(){}public voidtest(){//在外部類中調用內部類的屬性和方法
Inner inner = this.newInner();
inner.d= 1; //通過創建內部類實例來調用內部類屬性
inner.walk(); //通過創建內部類實例來調用內部類方法
}//成員內部類
public classInner{//定義一個靜態常量
static final int m = 1;//在內部類中定義一個靜態變量和一個實例變量//static int c; 編譯出錯
intd;//定義一個匿名代碼塊和一個靜態代碼塊
{}//static{} 編譯出錯//定義一個靜態方法和一個普通方法//public static void go(){} 編譯出錯
public voidwalk(){//在內部類中調用外部類的屬性和方法
a = 1;
b= 1;
say();
test();//內部類可以直接訪問外部類的所有屬性和方法
}
}
}
總結:1、成員內部類可以由public protected default private修飾
2、成員內部類是依賴于外部類的對象而存在的,在創建成員內部類的實例時,外部類的實例必須已經存在。
3、成員內部類可以包含哪些內容
1)匿名代碼塊
2)非靜態屬性
3)非靜態方法
注意:成員內部類中不能有靜態屬性和方法但可以有靜態常量(即用static final修飾的屬性),因為在類加載時會初始化static修飾的內容,而成員內部類必須依賴于內部類對象,即成員內部類要在外部類加載之后加載,所以不能包含靜態的變量和方法。使用final修飾的靜態變量類加載時會自動初始化其值,將其作為一個常量,所以可以出現在內部類中。
4、外部類訪問內部類
外部類可以通過創建成員內部類實例來訪問成員內部類中的屬性和方法
5、成員內部類訪問外部類
成員內部類可以直接訪問外部類的所有屬性和方法
注意:?如果成員內部類B與外部類A包含同名的成員,那么在類B中, this.v表示類B的成員, A.this.v表示類A的成員。
6、創建內部類實例的方法
1)在外部類中創建:內部類名 name = this.new 內部類名();
2)在非外部類中創建:外部類名.內部類名 name = new 外部類名().new 內部類名();